2

我有一个正则表达式来检查字符串作为电子邮件格式,如下所示:

Pattern p = Pattern.compile("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@ + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");

正确的电子邮件格式是xxx.xxx@xxx.com

但有时我的用户抱怨由于电子邮件格式无效,他们无法从应用程序发送电子邮件。

使用时Matcher m = p.matcher(email);,如何找出与正则表达式不匹配的单词/字符?

4

2 回答 2

0

这是直接不可能的。

正则表达式失败或成功,它不能部分成功,如果失败,正则表达式引擎通常不会让您访问精确的故障点。

对我来说更突出的问题是您依赖正则表达式来验证电子邮件地址。这永远不会奏效,因为电子邮件地址可能非常复杂。

做一个非常基本的检查会更有意义,即检查"^.+@.+",然后使用解析器进行适当的验证,并使用带有验证码的测试邮件发送到该地址。无论如何,您都需要这样做,因为当然,并非每个有效地址实际上都指向现有邮箱。

于 2013-05-20T07:14:03.263 回答
0

利用

string.replaceAll

像这样 :

class Test {
  public static void main(String[] args) {
    String str = "word <a href=\"word\">word</word>word word";
    str = str.replaceAll("word(?!([^<]+)?>)", "repl");
    System.out.println(str);
  }
}

那么不替换的字符串就是你想要的

于 2013-05-20T07:13:06.063 回答