我试图修改一个现有的正则表达式从一个属性文件拉入一个Java程序,别人建立。
当前用于匹配电子邮件地址的正则表达式是-
RR.emailRegex=^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$
这与电子邮件地址(如abc.xyz@example.com)匹配,但现在一些电子邮件地址中有破折号,如abc-def.xyz@example.com,这些地址与正则表达式模式匹配失败。
我的新正则表达式是什么来将破折号添加到正则表达式匹配中,或者有没有更好的方法来表示它?
根据您使用的正则表达式,您可以将破折号添加到您的字符类中:
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_]$
应该可以解决你的问题。在正则表达式中,你需要转义任何在正则表达式引擎中有意义的东西(例如. -, ?, *, 等)。