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