我需要一个正则表达式来匹配遵循以下规则的电子邮件:
它可以是
anyemail@anydomain.tld
或
noreply@mydomain.com
但是,它不能是来自mydomain.com 的任何其他电子邮件
到目前为止,我尝试使用这样的东西:
(w+@[^mydomain]w+.com)|(noreply@mydomain.com)
然而,它似乎并没有像预期的那样工作——它对以m
开头的每个域都会失败。就像anyemail@myotherdomain.com
一样会失败,它不应该。我使用的是PHP regexp btw.
在正则表达式中,[^mydomain]
是一个否定的字符类,它匹配1个不是m
、y
、d
、o
、a
、i
、n
的字符。要真正限制一些通用模式,您需要使用一个lookaround(此处为lookahead),即(?!mydomain.com)
。
请注意,要匹配任何TLD,可以使用w+
,而不是将其硬编码为com
。
此外,如果要将文本.
符号与正则表达式匹配,则应该对其进行转义(.
),或者将其放置在字符类[.]
中。
所以,使用
w+@(?!mydomain.com)w+.w+|noreply@mydomain.com
请参阅regex演示