正则表达式问题

1 regex asp.net visual-studio-express visual-studio-2008

我在asp.net电子邮件测试框中有以下正则表达式:

([a-zA-Z0-9_\-\.]+)\@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))
Run Code Online (Sandbox Code Playgroud)

此正则表达式仅适用于

xxx@base.co.uk
xxx@base.com
xxx@group.com
Run Code Online (Sandbox Code Playgroud)

它不适用于:

xxx@arg.co.uk
xxx@arggroup.com
Run Code Online (Sandbox Code Playgroud)

请帮我

Ric*_*dle 10

这个:

[a-zA-Z0-9_-.]
Run Code Online (Sandbox Code Playgroud)

包含伪造范围,下划线到点.你的意思是"下划线,破折号或点"这样:

[a-zA-Z0-9_\-.]
Run Code Online (Sandbox Code Playgroud)

?一旦我解决了这个问题,它对我有用.

您还应该使用\.而不是.在地址中 - 点匹配任何字符,因此您可以匹配baseXcom您的模式.(请注意,[]s中的点不需要反斜杠.)

完整更正的表达:

@"([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))"
Run Code Online (Sandbox Code Playgroud)

(请注意,我正在使用@""以避免反斜杠.)


Rat*_*rya 6

虽然我没有遇到确切的问题,但你错过/忽略了一个重点.:-)

'.' 是正则表达式中的外卡,它匹配任何东西.

匹配 '.' 使用

\.
Run Code Online (Sandbox Code Playgroud)

试试看吧

([a-zA-Z0-9_\-.]+)@(base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com)
Run Code Online (Sandbox Code Playgroud)

  • @Rats:无需转义字符范围([])中的点(.).字符范围中的点仅匹配点. (4认同)