0

正規表現をアーカイブして、スパムとは異なるバウンスされた電子メールまたは一時的に配信不能な電子メールをフィルタリングしようとしています。

式に含まれる可能性のある特定の単語(コード+単語)を取得しますが、(SPAM |一時的に配信不能|ディスククォータを超えました)などの他の単語が含まれている場合は、行全体を無視します。これは永続的なバウンスとは見なされないためです。私たちは最初の部分を管理し、負の正規表現(http://stackoverflow.com/questions/1153856/string-negation-using-regular-expressions)についてここでいくつかの答えを見つけましたが、1つのグループで両方を混合することは完全に失敗しましたこれまでの文。

何かのようなもの:

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

ただし、同じ行の他の場所にxxx語が含まれている場合は一致しません。何かのようなもの:

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

したがって、次の最初の行は一致しますが、2番目の行は一致しないはずです

診断コード:smtp; 5.3.0-その他のメールシステムの問題554-「配信エラー:ddこのユーザーはbtinternet.comアカウント(xxxxxxxx@xxxxxinternet.com)を持っていません[0]-mta1000.bt.mail.ird.yahoo.com」(配信試行:0)

診断コード:smtp; 5.1.0-不明なアドレスエラー550-「RCPTTO:メールボックスディスククォータを超えました」(配信試行:0)

4

1 に答える 1

2

文字列の先頭でのみ否定を検索しています。追加する必要があるのは.*

試す

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

ここRegexrでそれを参照してください

于 2012-08-16T10:29:54.293 に答える