正则表达式中的多个问号

时间:2013-04-16 22:34:02

标签: regex spam-prevention

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

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

意图是它将标记“meds”一词的混淆版本。不幸的是,它也恰好标记以“我”结尾的句子。

我正在努力弄清楚这个正则表达式实际上做了什么,但我被卡住了因为我不知道[e????????3]的意思。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:4)

如果它不在字符类中,?将使前一个标记可选。在?内,它与文字?匹配。在字符类中重复相同的字符无效,因此[e????????3]等同于[e?3]。正则表达式的这一部分将匹配e?3的单个字符。

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

答案 1 :(得分:2)

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

  轻轻地,柔软地捕捉猴子。 [图]

要了解更多信息,您需要研究该正则表达式的来源,并查看编码问题可能与之相关的内容。运气,耐心和清醒的头脑,您会发现哪些具体字符在那里。很可能不是一个单一的问号。