典型的合法电子邮件“标题来自”字段如下所示:
From: DHL <[email protected]>
From: DHL <[email protected]>
虽然非合法电子邮件“标题来自”字段看起来像:
From: DHL <[email protected]>
我想编写一个正则表达式来匹配非合法电子邮件“header from”的情况,也就是说,如果DHL出现在“From:”之后,那么<>里面的内容必须以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})(?=>$)
对于 Postfix
regexp_table
(5):
/^From: DHL <.*@([-A-Za-z0-9]+\.)*[Dd][Hh][Ll]\.[Cc][Oo][Mm]>$/i DUNNO
/^From: DHL </i REJECT
对于后缀
pcre_table
(5):
/^From: DHL <.*@(?!(?i)([-a-z0-9]+\.)*dhl\.com>$)/i REJECT