将Dash添加到Java正则表达式

mat*_*ers 3 java regex

我正在尝试修改从其他人构建的Java程序的属性文件中提取的现有Regex表达式。

用于匹配电子邮件地址的当前Regex表达式为-

RR.emailRegex=^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9_]+$
Run Code Online (Sandbox Code Playgroud)

可以匹配诸如abc.xyz@example.com之类的电子邮件地址,但是现在其中一些破折号诸如abc-def.xyz@example.com之类的破折号却使 Regex模式匹配失败。

我的新Regex表达式是将破折号添加到该正则表达式匹配项是什么,还是有更好的方式来表示呢?

roc*_*987 6

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

您也不需要.在字符类内部转义,因为它被视为.字面意义上的字符类内部。

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

^[-\w.]+@[\w]+\.[\w]+$
Run Code Online (Sandbox Code Playgroud)

Java中,这可以写成

^[-\\w.]+@[\\w]+\\.[\\w]+$
Run Code Online (Sandbox Code Playgroud)


Fed*_*zza 5

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

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_-]+$
Run Code Online (Sandbox Code Playgroud)

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

RR.emailRegex=^[\\w.-]+@[\\w-]+\\.[\\w-]+$
Run Code Online (Sandbox Code Playgroud)

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

if (EmailValidator.getInstance().isValid(email)) ....
Run Code Online (Sandbox Code Playgroud)