Java模式匹配:Pattern.compile

时间:2010-12-27 09:54:28

标签: java pattern-matching

我有一个编辑框。我正在检查输入的电子邮件地址是否有效。

Pattern pattern1 = Pattern.compile("^[\\w-]*@[\\.\\w-]*$");
Pattern pattern2 = Pattern.compile("^\\w+$");
Matcher matcher1 = pattern1.matcher(string);
Matcher matcher2 = pattern2.matcher(string);    
return matcher1.matches();
return matcher2.matches();

如果我输入的电子邮件地址为spunker.baba@foo.com,则会出现此问题。匹配器返回false。它认为char“。”无效。

我应该如何修改我的代码,使其支持“。”和匹配器返回true。

2 个答案:

答案 0 :(得分:3)

目前尚不清楚为什么你有两个模式(和两个返回语句!)而不是一个......但你的第一个模式在@符号之前只包括\w-,尽管它之后允许.。这很容易修改,因此第一部分与第二部分相同:

Pattern pattern1 = Pattern.compile("^[\\.\\w-]*@[\\.\\w-]*$");

但是,有很多网站提供了更准确的电子邮件地址匹配正则表达式模式 - 例如this one in Perl(我怀疑它会简单地移植到Java)。还有一个带有fairly long explanation and Java code的页面,如果您还要处理包含友好名称的地址。我敢肯定,如果你四处搜索,你会发现一个符合你确切需求的模式 - 尽管你如何判断哪些页面是可靠的是另一回事。

编辑:如果你想在没有最后一部分的情况下进行匹配,你可以将它设为可选:

Pattern pattern1 = Pattern.compile("^[\\.\\w-]*(@[\\.\\w-]*)?$");

答案 1 :(得分:0)

Pattern.compile("^[\\w-\.]*@[\\.\\w-]*$")

请注意,此模式将匹配无效字符串(假设@不是有效的电子邮件地址)。它也不会匹配其他有效的电子邮件地址(即name+other@gmail.com