未检测到正则表达式PRIG_QUOTE符号

2022-03-29 00:00:00 regex php preg-match profanity

我在数据库里有一本脏话词典,下面的作品很棒

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

中找到f@ck

更新:

这是我的用法,简单地说,如果$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. ***"


解决方案

无法执行

很抱歉,这个"问题"确实不可能解决。请考虑以下几点:

相关文章