【问题标题】:Regex - exclude domain正则表达式 - 排除域
【发布时间】:2015-09-25 15:19:33
【问题描述】:

可以说,我有域名

@abc.com.

如果有 3 个或更多外部收件人,我需要匹配模式。

例如: 致:

user1@abc.com;外部@contoso.com;用户2@abc.com;用户3@abc.com; user4@abc.com;用户5@abc.com; external2@contoso.com; test@google.com

我已经拥有的正则表达式如下所示:

To:(.*@[^a][^b][^c][^.][^c][^o][^m].*){3,}

它有点工作,但看起来很讨厌。 也许以某种方式实现这一点? ^((?!@abc.com).){3,}

谢谢!对我有很大帮助

【问题讨论】:

标签: regex


【解决方案1】:

你需要匹配:

  1. 一个"@"
  2. 后面没有"abc."
  3. 还有更多字符,直到下一个 "@"
  4. (1)、(2) 和 (3) 重复 3 次

此表达式将匹配具有 3 个外部收件人的主题:

(?:@(?!abc[.]).*?){3}

DEMO


它使用negative lookahead (?!abc[.]) 来检查它是否被您的域所关注。 .*? 用于在不同的@s 之间使用字符。

您也可以将abc[.] 更改为abc[.]com(?:[; ]|$) 或您的真实域名。

【讨论】:

  • 我在 regexp.cz 上测试你的代码,到目前为止,它们都不起作用。测试字符串:收件人:user1@abc.com;外部@contoso.com;用户2@abc.com; user4@abc.com;用户5@abc.com; external2@contoso.com;external@contoso.com;external@contoso.com 在点击“GREP”按钮后,如果有更多外部收件人,结果应该匹配..
  • grep 不支持lookaheads。您应该通过标记您的问题来真正指定您的编程/脚本语言或工具。你在命令行使用 grep 吗?
  • 如果外部收件人的数量超过 n 个,则为后缀拒绝匹配。只是要清楚
  • 你可以使用 Perl 或 PCRE 作为正则表达式吗?你会在哪里使用这个?命令行 grep,一个脚本,什么语言?
  • mattshaw.org/news/how-to-filter-mail-with-postfix-header_checks 如果有 x 个外部收件人(本地收件人可以是无限的),则操作将被拒绝
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2021-09-16
  • 2014-04-11
  • 2016-05-09
  • 2013-06-08
相关资源
最近更新 更多