典型的合法电子邮件"来自";字段看起来像:
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})(?=>$)