You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用正则表达式筛选不含ruba.com域名的邮箱地址

如何用正则表达式筛选域名不为ruba.com的邮箱?

你的需求很明确:从邮箱列表里排除所有域名恰好是ruba.com的邮箱,留下其他所有合法邮箱。先说说你之前写的两个正则为什么行不通:

  1. 第一个正则 [a-zA-Z0-9_.+-]+@[^(ruba)]+.[a-zA-Z0-9-.]+
    这里的[^(ruba)]字符组,它的意思是“匹配任意一个不是r、u、b、a、(、)的字符”,而不是“匹配不是ruba这个字符串的内容”。所以像rubd.com里的r、u、b都会被这个字符组拒绝,导致整个邮箱无法匹配,完全不符合你的需求。

  2. 第二个正则 [a-zA-Z0-9_.+-]+@[^r][^u][^b][^a]+.[a-zA-Z0-9-.]+
    这个写法是要求域名的前四个字符分别不能是r、u、b、a,逻辑完全错了。比如你要保留的dgh@rubd.com,它的域名前四个字符是r、u、b、d,第二个字符是u,正好命中[^u]的排除规则,导致这个合法邮箱被错误过滤掉。

正确的正则表达式

我们需要用**负向预查(Negative Lookahead)**来精准排除域名是ruba.com的情况,正则如下:

^[a-zA-Z0-9_.+-]+@(?!ruba\.com$)[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]+$

拆解说明:

  • ^:匹配字符串的开头,确保我们从邮箱的最开始检查
  • [a-zA-Z0-9_.+-]+:匹配邮箱的本地部分(@之前的内容),符合RFC标准的邮箱本地格式
  • @:匹配邮箱必备的@符号
  • (?!ruba\.com$):核心的负向预查,意思是“@后面不能紧跟着ruba.com直到字符串结束”,精准排除域名恰好是ruba.com的情况
  • [a-zA-Z0-9.-]+:匹配域名的主域部分(比如gmail、rubd)
  • \.[a-zA-Z0-9-]+:匹配顶级域名(比如.com),注意这里的.要转义成\.,因为正则里.默认匹配任意字符
  • $:匹配字符串的结尾,确保我们检查的是完整的邮箱地址

验证你的例子:

  • ads@gmail.com:匹配成功(域名不是ruba.com)
  • dgh@rubd.com:匹配成功(域名不是ruba.com)
  • ert@ruba.com:匹配失败(域名正好是ruba.com,被预查排除)

完全符合你的需求!

内容的提问来源于stack exchange,提问作者Deba

火山引擎 最新活动