如果为false,如何获取正则表达式检查结果?

时间:2013-05-20 07:05:20

标签: java regex email

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

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);时,如何找出与正则表达式不匹配的单词/字符?

2 个答案:

答案 0 :(得分: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);
  }
}

然后不能替换的字符串是你想要的

答案 1 :(得分:0)

这不是直接可能的。

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

对我来说,更突出的问题是你依赖正则表达式来验证电子邮件地址。由于电子邮件地址可能非常复杂,因此永远不会起作用。

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