使用preg_replace_callback的正则表达式用于亵渎过滤器

时间:2018-05-09 23:57:13

标签: php regex preg-replace preg-replace-callback

我有一个工作函数,它正在获取一系列坏词然后用星号替换坏词。

当我升级到PHP7时,我必须使用scrollTo,因为preg_replace_callback preg_replace修饰符已弃用。

这就是我使用它的方式:

e

这是我的新代码:

function filterwords($text){

       $filterWords = array("dummy");
       $filterCount = sizeof($filterWords);

        for($i=0; $i<$filterCount; $i++){
            $text = preg_replace('/\b'.$filterWords[$i].'\b/ie',"str_repeat('*',strlen('$0'))",$text);
        }

 return $text;
}

这输出&#34;我是**&#34; 但我想要的输出是&#34;我是*****&#34; < / em>(有5个星号而不是2个。)

1 个答案:

答案 0 :(得分:1)

preg_replace中使用的$0中使用的反向引用在preg_replace_callback中没有任何意义。您正在将匹配项作为$matches传递给函数,但是您正在检查strlen('$0')这只是一个2个字符的字符串$0,因此您得到2 *

使用$matches和反向引用的编号。就像你习惯的那样,0就是完全匹配:

return str_repeat('*', strlen($matches[0]));