2

我下载了一组我打算用于垃圾邮件过滤的正则表达式。其中一个看起来像这样:

/(?!med['`s]?)\bm[_\W]{0,5}[e????????3][_\W]{0,5}[d?][_\W]{0,5}[sz5\$]?\b/i

目的是它会标记“meds”这个词的混淆版本。不幸的是,它也恰好标记以“我?”结尾的句子。

我正在向后工作,试图弄清楚这个正则表达式实际上做了什么,但我被困住了,因为我不知道是什么[e????????3]意思。有人可以解释一下吗?

4

2 回答 2

4

当它不在字符类中时,?将使前面的标记成为可选的。在 a?它里面只是匹配一个字面量?。在一个字符类中重复相同的字符没有效果,所以[e????????3]等价于[e?3]. 这部分正则表达式将匹配单个字符,即e?3

请注意,?在一些编码问题出现之前,这些字符可能实际上是其他东西。

于 2013-04-16T22:36:37.143 回答
2

这很可能是字符编码错误。在那个字符类([...]是一个类)中,曾经有其他字符无法解析,然后当显示/转置为?发出信号。最后多个??????s结束了那里。

轻轻地,轻轻地抓猴子。[图。]

要了解更多信息,您需要研究该正则表达式的起源,并查看可能与编码问题相关的位置。如果运气好、耐心和头脑清醒,您就会发现其中有哪些具体字符。很可能不是一个逐字的问号。

于 2013-04-16T22:48:46.813 回答