0

尝试归档正则表达式以过滤退回的电子邮件,将它们与垃圾邮件或临时无法投递不同。

我们的想法是抓取表达式可能包含的某些单词(代码 + 单词),但如果它包含其他单词,例如(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)

4

1 回答 1

2

You are searching only at the start of the string for your negation. You just need to add a .*

try

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

See it here on Regexr

于 2012-08-16T10:29:54.293 回答