我下载了一组我打算用于垃圾邮件过滤的正则表达式。其中一个看起来像这样:
/(?!med['`s]?)\bm[_\W]{0,5}[e????????3][_\W]{0,5}[d?][_\W]{0,5}[sz5\$]?\b/i
目的是它会标记“meds”这个词的混淆版本。不幸的是,它也恰好标记以“我?”结尾的句子。
我正在向后工作,试图弄清楚这个正则表达式实际上做了什么,但我被困住了,因为我不知道是什么[e????????3]
意思。有人可以解释一下吗?
我下载了一组我打算用于垃圾邮件过滤的正则表达式。其中一个看起来像这样:
/(?!med['`s]?)\bm[_\W]{0,5}[e????????3][_\W]{0,5}[d?][_\W]{0,5}[sz5\$]?\b/i
目的是它会标记“meds”这个词的混淆版本。不幸的是,它也恰好标记以“我?”结尾的句子。
我正在向后工作,试图弄清楚这个正则表达式实际上做了什么,但我被困住了,因为我不知道是什么[e????????3]
意思。有人可以解释一下吗?
当它不在字符类中时,?
将使前面的标记成为可选的。在 a?
它里面只是匹配一个字面量?
。在一个字符类中重复相同的字符没有效果,所以[e????????3]
等价于[e?3]
. 这部分正则表达式将匹配单个字符,即e
、?
或3
。
请注意,?
在一些编码问题出现之前,这些字符可能实际上是其他东西。
这很可能是字符编码错误。在那个字符类([...]
是一个类)中,曾经有其他字符无法解析,然后当显示/转置为?发出信号。最后多个??????s结束了那里。
轻轻地,轻轻地抓猴子。[图。]
要了解更多信息,您需要研究该正则表达式的起源,并查看可能与编码问题相关的位置。如果运气好、耐心和头脑清醒,您就会发现其中有哪些具体字符。很可能不是一个逐字的问号。