正则表达式如果包含X但不包含XXX

时间:2012-08-16 10:18:05

标签: regex regex-negation

尝试存档正则表达式以过滤退回的电子邮件,这些电子邮件与垃圾邮件不同或暂时无法送达。

我们的想法是抓住表达式可能包含的某些单词(代码+单词)但忽略整行,如果它包含其他内容(例如SPAM |暂时无法送达|超出磁盘配额)等,因为这不会被视为永久性反弹。我们已经管理了第一部分,并在这里找到了一些关于负面正则表达式(http://stackoverflow.com/questions/1153856/string-negation-using-regular-expressions)的答案,但是在一个组中混合两者都完全没有成功到目前为止的判决。

类似的东西:

.*(5.3.0|5.1.0).*(User unknown|invalid|Unknown address|doesn't have a)

但如果同一行中的任何其他地方包含xxx字,则不匹配。类似的东西:

^(?!(SPAM|temporarily undeliverable|disk quota exceeded)).*$

所以下面的第一行会匹配,但第二行不应该

  

诊断代码:smtp; 5.3.0 - 其他邮件系统问题554-“交付   错误:dd此用户没有btinternet.com帐户   (xxxxxxxx@xxxxxinternet.com)[0] - mta1000.bt.mail.ird.yahoo.com“   (交付尝试:0)

     

诊断代码:smtp; 5.1.0 - 未知地址错误550-'RCPT   TO:邮箱磁盘配额超出'(交付   尝试:0)

1 个答案:

答案 0 :(得分:2)

您只是在字符串的开头搜索您的否定。您只需添加.*

即可

^(?!.*(SPAM|temporarily undeliverable|disk quota exceeded)).*(5.3.0|5.1.0).*(User unknown|invalid|Unknown address|doesn't have a)

here on Regexr