未检测到正则表达式preg_quote符号无法完成
2022-08-30 12:59:43
我在数据库中有一本脏话词典,下面的工作很棒
preg_match_all("/\b".$f."(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
$t
是输入文本,简单来说, ; 来自数据库字典,因此此时在循环中的表达式如下所示$f = preg_quote("punk")
"punk"
preg_match_all("/\bpunk(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
preg_quote
替换符号,例如。 与 这样表达式被转义,但是当字典正在检查时,例如。 或者这些符号在具有上述表达式的输入字符串中未检测到,我两者都在字典中,但它们不起作用。如果我删除单词,正则表达式无效,因为这些符号没有被转义。#
\\#
"F@CK"
"A$$"
a$$
f@ck
preg_quote()
关于如何检测???的任何建议"a$$"
编辑:
所以我想没有按预期工作的表达式将是例如。
preg_match_all("/\bf\@ck(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
哪个应该在 f@ck$t
更新:
这是我的用法,简单地说;如果有匹配项,则将其替换为 ,则整个块位于字典中每个单词的循环内,是字典单词并且是输入$m
"\*\*\*\*"
$f
$t
$f = preg_quote($f);
preg_match_all("/\b$f(?:ing|er|es|s)?\b/si",$t,$m,PREG_SET_ORDER);
if (count($m) > 0) {
$t = preg_replace("/(\b$f(?:ing|er|es|s)?\b)/si","\*\*\*\*\*",$t);
}
更新:看哪,:var_dump
preg_quote($f) = string(5) "a\$\$"
$t = string(18) "You're such an a$$"
expression = string(29) "/\ba\$\$(?:ing|er|es|s)?\b/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("/\b".$f."(?:ing|er|es|s)?\b/si",
str_repeat("*",strlen($f)),
$t);
}
我应该期待看到结果。"Input whatever you feel like here eg. \*\*\*"