我正在尝试修改从其他人构建的Java程序中的属性文件中引入的现有Regex表达式。
用于匹配电子邮件地址的当前Regex表达式是 -
RR.emailRegex=^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$
匹配电子邮件地址,例如 abc.xyz@example.com ,但现在某些电子邮件地址中包含破折号,例如 abc-def.xyz@example.com 那些正在使Regex模式匹配失败。
我的新Regex表达式会将短划线添加到正则表达式匹配中,还是有更好的方法来表示?
答案 0 :(得分:4)
根据您正在使用的正则表达式,您可以将短划线添加到角色类中:
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)) ....
答案 1 :(得分:1)
^[a-zA-Z0-9_\\.\\-]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$
应该解决你的问题。在正则表达式中,你需要逃避任何在Regex引擎中有意义的东西(例如 - ,?,*等)。
答案 2 :(得分:0)
正确的Regex修复程序如下。
旧正则表达式
^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$
新的正则表达式
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
答案 3 :(得分:0)
-
在字符类中的含义与在别处使用的含义不同。内部字符类-
表示范围。例如0-9
。如果要包含-
,请将其写在字符类的开头或结尾,例如[-0-9]
或[0-9-]
。
你也不需要在字符类中转义.
因为它在字符类中被视为.
。
您的正则表达式可以进一步简化。 \w
表示[A-Za-z0-9_]
。所以你可以使用
^[-\w.]+@[\w]+\.[\w]+$
在 Java 中,这可以写成
^[-\\w.]+@[\\w]+\\.[\\w]+$
答案 4 :(得分:0)
其实我读过this post它涵盖了所有特殊情况,所以最适合java工作的是
String pattern ="(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";