Regexp以选择性地匹配电子邮件



我需要一个正则表达式来匹配遵循以下规则的电子邮件:

它可以是

anyemail@anydomain.tld

noreply@mydomain.com

但是,它不能是来自mydomain.com 的任何其他电子邮件

到目前为止,我尝试使用这样的东西:

 (w+@[^mydomain]w+.com)|(noreply@mydomain.com)

然而,它似乎并没有像预期的那样工作——它对以m开头的每个域都会失败。就像anyemail@myotherdomain.com一样会失败,它不应该。我使用的是PHP regexp btw.

在正则表达式中,[^mydomain]是一个否定的字符类,它匹配1个不是mydoain的字符。要真正限制一些通用模式,您需要使用一个lookaround(此处为lookahead),即(?!mydomain.com)

请注意,要匹配任何TLD,可以使用w+,而不是将其硬编码为com

此外,如果要将文本.符号与正则表达式匹配,则应该对其进行转义(.),或者将其放置在字符类[.]中。

所以,使用

w+@(?!mydomain.com)w+.w+|noreply@mydomain.com

请参阅regex演示

最新更新