将Dash添加到Java Regex

时间:2016-05-03 17:33:10

标签: java regex

我正在尝试修改从其他人构建的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表达式会将短划线添加到正则表达式匹配中,还是有更好的方法来表示?

5 个答案:

答案 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])+)\\])";