未检测到正则表达式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. ***"。
解决方案
无法执行
很抱歉,这个"问题"确实不可能解决。请考虑以下几点:
相关文章