Regexp有选择地匹配电子邮件

时间:2015-12-03 09:47:25

标签: regex email

我需要一个符合这些规则的电子邮件的正则表达式:

可以是

anyemail@anydomain.tld

OR

noreply@mydomain.com

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

到目前为止,我尝试使用类似的东西:

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

然而它似乎没有按预期工作 - 它以m开头的每个域都失败了。就像anyemail@myotherdomain.com会失败而不应该失败。我正在使用PHP regexp btw。

1 个答案:

答案 0 :(得分:1)

在你的正则表达式中,[^mydomain]是一个negated character class,匹配1个不是mydo的字符, ain。要实际限制某些通用模式,您需要使用lookaround(此处为预测),即(?!mydomain\.com)

请注意,要匹配任何TLD,您可以使用\w+代替将其com硬编码。

另外,如果要将文字.符号与正则表达式匹配,则应该将其转义(\.)或放在字符类[.]内。

所以,使用

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

请参阅regex demo