代码之家  ›  专栏  ›  技术社区  ›  Deba

如何避免使用regex选择具有特定域名的电子邮件ID

  •  2
  • Deba  · 技术社区  · 8 年前

    我有一个电子邮件ID列表,其中我只能选择那些没有 鲁巴。通用域名格式 使用regex作为域名。例如,如果我有ads@gmail.com, dgh@rubd.com和ert@ 鲁巴 .com,则正则表达式应选择前两个ID。这个问题的正则表达式应该是什么?

    我尝试了两种表达方式:

    [a-zA-Z0-9\.+-]+@[^(ruba)]+。【a-zA-Z0-9-.】+ [a-zA-Z0-9\+-]+@[^r][^u][^b][^a]+。【a-zA-Z0-9-.】+

    以上两个都不能满足我的要求。

    2 回复  |  直到 8 年前
        1
  •  0
  •   Francesco B. PahJoker    8 年前

    我想你说的电子邮件ID是指 @ 符号,否则将是完整的电子邮件地址。

    .+(?=@)(?!@ruba\.com)
    
    • . 点字符是正则表达式引擎的特殊符号 它被用来捕捉一切
    • * 亦称为 Kleene plus 表示要捕获前面符号的一个或多个实例,在本例中 . ; 基本上你是说“给我每一个字符”
    • (?=@) 是一种积极的前瞻性,即一种特殊的搜索功能,可确保以下内容 @ ; 我用它把光标移到 @ 和“停止”捕获,否则 + 会无限期地继续下去
    • (?!@ruba\.com) 是一种消极的前瞻性,即一种特殊的搜索功能,可确保以下内容不会( ! ) @ruba\.com ; 我逃离圆点是为了不把它和我之前说的“捕获所有”符号混淆

    现场演示 here .

        2
  •  0
  •   K.Dᴀᴠɪs    8 年前

    您可以使用负前瞻性来确保与域不匹配 鲁巴。通用域名格式 .

    负面展望: (?!rubd) 将匹配 反对 要排除的任何内容。此外,由于电子邮件通常不止文字字符(如连字符和句点),因此最好使用 [\w\.\-] 而不仅仅是 \w .

    ^[\w\.\-]+@(?!rubd)[\w\.\-]+\.(?:com|net|org|edu)$
    

    DEMO