Hello All ,
我正在尝试使用 preg_match 来识别是否在一个文本字符串中找到了单个单词。如果单词中的每个字符有多个实例(按照正确的顺序),则需要拾取该单词。为了让自己的生活变得艰难,即使客户试图通过在我希望匹配的单词中输入某些字符来“欺骗”preg_match,我也想要接受这个词。
它用于脏话过滤器,如果找到'dave',我将用其他东西替换它。我试图想出完美的正则表达式,但我没有太多运气。请参阅以下示例和我到目前为止发现的问题(我使用3作为示例字符,客户可以用来“欺骗”支票);
使用:~\b(?:3+)?d+(?:3+)?a+(?:3+)?v+(?:3+)?e+(?:3+)?\b~i
好
不行
使用:~\b[d3]+[a3]+[v3]+[e3]+\b~i
好
不行
感谢您对正则表达式的任何帮助,非常感谢。
答案 0 :(得分:2)
这不会奏效。
例如,您的过滤器将阻止“firetruck”;)
有人也可以用u
代替v
或c
代替<
我不知道是否有一种建立亵渎过滤器的好方法,除了拥有大量已知单词和错误拼写的白名单。
也许你应该重新考虑为什么你想要亵渎过滤器。如果您的“客户”想要它,请让他们提供他们想要阻止的单词列表,这不是您的问题。
答案 1 :(得分:2)
不讨论它是否是一个好的亵渎过滤器(可能不是!),以下正则表达式将满足您的规范:
d.*a.*v.*e
如果'3'是唯一的'特殊'字符,那么试试这个:
d3*a3*v3*e