未检测到正则表达式PRIG_QUOTE符号
我在数据库里有一本脏话词典,下面的作品很棒
preg_match_all("/".$f."(?:ing|er|es|s)?/si",$t,$m,PREG_SET_ORDER);
$t
是输入文本,简单地说,$f = preg_quote("punk")
;"punk"
来自数据库字典,所以在循环中的这一点,表达式如下
preg_match_all("/punk(?:ing|er|es|s)?/si",$t,$m,PREG_SET_ORDER);
preg_quote
替换符号,例如。#
与\#
一起使用,以便对表达式进行转义,但在字典检查时,例如。"F@CK"
或"A$$"
在使用上述表达式的输入字符串中未检测到这些符号,我在字典中同时有a$$
和f@ck
,但它们都不起作用。如果删除单词上的preg_quote()
,则正则表达式无效,因为这些符号没有转义。
关于如何检测"a$$"
??
编辑:
所以我猜没有按预期工作的表达式应该是。
preg_match_all("/f@ck(?:ing|er|es|s)?/si",$t,$m,PREG_SET_ORDER);
应在$t
更新:
这是我的用法,简单地说,如果$m
中有匹配项,替换为"****"
,这整个挡路就是在词典中每个词的循环中,$f
是词典里的词,$t
是输入
$f = preg_quote($f);
preg_match_all("/$f(?:ing|er|es|s)?/si",$t,$m,PREG_SET_ORDER);
if (count($m) > 0) {
$t = preg_replace("/($f(?:ing|er|es|s)?)/si","*****",$t);
}
更新:
看,var_dump
:
preg_quote($f) = string(5) "a$$"
$t = string(18) "You're such an a$$"
expression = string(29) "/a$$(?:ing|er|es|s)?/si"
更新:
只有当单词以符号结尾时,才会发生这种情况。我测试了"a$$hole"
,它很好,但是"a$$"
不起作用。
另一个更新:
试试这个简化版,$words
是临时词典
$words = array("a$$","asshole","a$$hole","f@ck","f#ck","f*ck");
$text = "Input whatever you feel like here eg. a$$";
foreach ($words as $f) {
$f = preg_quote($f,"/");
$text = preg_replace("/".$f."(?:ing|er|es|s)?/si",
str_repeat("*",strlen($f)),
$t);
}
我预计会因此看到"Input whatever you feel like here eg. ***"
。
解决方案
无法执行
很抱歉,这个"问题"确实不可能解决。请考虑以下几点:
相关文章