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

问题描述

典型的合法电子邮件标题来自”字段如下所示:

From: dhl <noreply@dhl.com>

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

虽然不合法的电子邮件标题来自”字段看起来像:

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

我想写一个正则表达式,在非合法电子邮件“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 的解决方案。

解决方法

因为你不能使用负前瞻,而且你只知道你不想匹配的东西,所以你必须用很多 | 逐个字母地测试它。运营商

这样的事情应该可以工作:

Event_name : (ex: screen) {
    Event_paremeter_name: (eg: screen_name) {
       Event_parameter_value : (eg: search_page)
    }
}
,

我认为这符合要求。

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

只是改变:

^From: DHL 

并与它匹配

.*dhl\.com

在域领域更广泛一些:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...