提问者:小点点

将Dash添加到Java正则表达式


我试图修改一个现有的正则表达式从一个属性文件拉入一个Java程序,别人建立。

当前用于匹配电子邮件地址的正则表达式是-

RR.emailRegex=^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$

这与电子邮件地址(如abc.xyz@example.com)匹配,但现在一些电子邮件地址中有破折号,如abc-def.xyz@example.com,这些地址与正则表达式模式匹配失败。

我的新正则表达式是什么来将破折号添加到正则表达式匹配中,或者有没有更好的方法来表示它?


共3个答案

匿名用户

根据您使用的正则表达式,您可以将破折号添加到您的字符类中:

RR.emailRegex=^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$
add
RR.emailRegex=^[a-zA-Z0-9_\\.-]+@[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+$

顺便说一句,您可以像这样缩短正则表达式:

RR.emailRegex=^[\\w.-]+@[\\w-]+\\.[\\w-]+$

无论如何,我会像这样使用Apache EmailValidator:

if (EmailValidator.getInstance().isValid(email)) ....

匿名用户

字符类中的-的含义与其他地方不同。字符类中的-表示范围。例如0-9。如果您想包含-,请将其写在字符类的开头或结尾,例如[-0-9][0-9-]

您也不需要在字符类中转义.,因为它被视为.字面意思是在字符类中。

您的正则表达式可以进一步简化。\w表示[A-Za-z0-9_]。所以你可以使用

^[-\w.]+@[\w]+\.[\w]+$

在Java,这可以写成

^[-\\w.]+@[\\w]+\\.[\\w]+$

匿名用户

^[a-zA-Z0-9_\\.\\-]@[a-zA-Z0-9_]\\.[a-zA-Z0-9_]$

应该可以解决你的问题。在正则表达式中,你需要转义任何在正则表达式引擎中有意义的东西(例如. -, ?, *, 等)。