正则表达式匹配的第一个电子邮件地址不是指定的电子邮件地址

时间:2018-05-22 14:26:51

标签: regex email

我有一个包含一个或多个电子邮件地址的字符串,我想使用正则表达式查找第一个不是指定电子邮件地址的电子邮件地址。例如,如果我的字符串包含一般形式的一个或多个电子邮件地址someone@somedomain.com,但也可能包含一个或多个特定电子邮件地址,恰好等于specialperson@anotherdomain.com,我如何找到第一个电子邮件地址匹配第一个表格而不是第二个表格?换句话说,我想要的第一个电子邮件地址不是specialperson@anotherdomain.com。所有电子邮件地址都可以按任何顺序排列。

1 个答案:

答案 0 :(得分:0)

匹配任何电子邮件地址的正则表达式为\w+@\w+\.\w{3}

然后(在此正则表达式刚刚匹配之后),您可以使用 一个负面的背后隐藏来排除“禁止”地址, 例如(?<!particularperson@anotherdomain\.com)

所以整个正则表达式可以是:

\w+@\w+\.\w{3}(?<!particularperson@anotherdomain\.com)

当然,不确定你的正则表达式是否支持消极 lookbehinds(例如JavaScript没有),但你没有指定它。

注意:您不能对禁止使用的地址使用否定前瞻, 然后正则表达式匹配任何地址。 原因是负面前瞻匹配后 (找到禁止的地址),正则表达式处理器移动一个 char前进并从这个地方开始下一次尝试这个looakhead将 不匹配。 因此匹配任何地址的正则表达式将匹配禁止 地址不仅仅是第一个字符。

修改

如果你有可变的最后一部分(.co.com和其他人),请尝试一下 不同的方法。

你不能写,例如在后面的.com?,因为它不允许 可变模式长度。

相反,你可以在最后一部分之前放置负面的背后的 (无论是什么)并仅检查particularpersonanotherdomain (在适当的位置加@.)。

另外两个补充:

  • 到目前为止,你有什么警告,既没有点也没有任何字 char,所以最后一部分应该是(?!\.\w)
  • 同样,整个正则表达式应以\b开头,以便开始 boudary这个词

所以纠正的正则表达式可以是:

\b\w+@\w+\.(?<!particularperson@anotherdomain\.)\w{2,3}(?!\.\w)