避免邮件垃圾邮件检测中的负面前瞻正则表达式



典型的合法电子邮件"来自";字段看起来像:

From: DHL <noreply@dhl.com>

From: DHL <legit.sender@noreply.dhl.com>

而非合法电子邮件";来自";字段看起来像:

From: DHL <fake.sender@somedomain.com>

我想写一个正则表达式,在非合法电子邮件的情况下匹配";来自";,即如果DHL出现在";从:";,那么<gt;必须以dhl.com 结尾

我使用负前瞻得到了以下正则表达式(不确定它是否100%准确,但它似乎有效(:

^From: DHL <.*@(?!.*dhl.com>$)

现在的问题是,我的正则表达式引擎不支持负前瞻,我正试图用一个等效的非捕获组来代替它,比如:

(?:[^d]|d[^h]|dh[^l]|dhl[^.]|dhl.[^c]|dhl.c[^o]|dhl.co[[^m])

迄今为止没有成功。知道吗?

如果有一个解决方案,我也想支持案例混合(比如DhL.COm(。

我正在寻找一个Postfix解决方案,最好是一个不需要PCRE的解决方案。

由于你不能使用负前瞻,而且你只知道你不想匹配的内容,所以你必须用很多|运算符逐个测试它

像这样的东西应该起作用:

^From: DHL <.*@.*[^mM]>$|^From: DHL <.*@.*[^oO][mM]>$|^From: DHL <.*@.*[^cC][oO][mM]>$|^From: DHL <.*@.*[^.][cC][oO][mM]>$|^From: DHL <.*@.*[^lL][.][cC][oO][mM]>$|^From: DHL <.*@.*[^hH][lL][.][cC][oO][mM]>$|^From: DHL <.*@.*[^dD][hH][lL][.][cC][oO][mM]$>

我认为这符合要求。

(?<=^From: DHL <).*dhl.com(?=>$)

只需更改:

^From: DHL 

并将其与匹配

.*dhl.com

在领域领域中更为普遍:

(?<=^From: DHL <).*dhl.([a-zA-Z]{1,3})(?=>$)

最新更新