正则表达式查找所有Gmail地址有2个例外

时间:2017-05-30 19:18:52

标签: regex

不可否认,我不是Regex的专业人士,但我通常能够找到自己需要的方式。这个虽然真的让我很难过。我试过了六种方法。

我试图查找@ gmail.com地址的所有实例,但有2个地址除外。

gmail域名搜索就像一个魅力:

(\w+([-+.']\w+)*@(gmail.com))

它为 brett@gmail.com smith@gmail.com 创建了一个例外,它真的给了我麻烦。任何见解都会很棒。

2 个答案:

答案 0 :(得分:2)

使用负向前瞻和单词边界\b,如下所示:

(?!smith@)(?!brett@)\b\w+(?:[-+.']\w+)*@gmail.com
  • 否定前瞻(?!brett@)(?!smith@)不允许仅包含brettsmith的电子邮件地址。 注意:在最后添加单词边界就像是一个黑客,因为它可以防止负向前瞻限制在用户名中包含brett作为前缀的电子邮件,并包含更多文本,例如{{1 }}和brett999由于每个单词后面的单词边界,现在可以接受这些。仅拒绝仅包含brett.doebrett的用户名
  • 由于之前的条件,
  • smith匹配的用户名不能只是\b\w+(?:[-+.']\w+)brett。它包含一个单词边界smith,以帮助负面前瞻正常工作

Regex101 Demo

\b

编辑:根据@ Paurian的评论进行修复。接得好! :)

答案 1 :(得分:0)

如果每封电子邮件都在自己的行中,以下内容适用于我:

^(?=.*?\w+([-+.']\w+)*@gmail.com)(?!^smith@|brett@).*$

通行证:

  • jack@gmail.com
  • fred@gmail.com
  • jsmith@gmail.com
  • dbrett@gmail.com
  • smith.john@gmail.com
  • brett_smith@gmail.com
  • brett.smith@gmail.com

失败:

  • smith@gmail.com
  • brett@gmail.com
  • foo@groovy.com