【发布时间】:2012-07-29 21:17:55
【问题描述】:
我有一些简单的代码可以进行预赛匹配:
$bad_words = array('dic', 'tit', 'fuc',); //for this example i replaced the bad words
for($i = 0; $i < sizeof($bad_words); $i++)
{
if(preg_match("/$bad_words[$i]/", $str, $matches))
{
$rep = str_pad('', strlen($bad_words[$i]), '*');
$str = str_replace($bad_words[$i], $rep, $str);
}
}
echo $str;
所以,如果 $str 是 "dic",结果将是 '*' 等等。
现在$str == f.u.c 有一个小问题。解决方案可能是使用:
$pattern = '~f(.*)u(.*)c(.*)~i';
$replacement = '***';
$foo = preg_replace($pattern, $replacement, $str);
在这种情况下,无论如何我都会得到***。我的问题是将所有这些代码放在一起。
我试过了:
$pattern = '~f(.*)u(.*)c(.*)~i';
$replacement = 'fuc';
$fuc = preg_replace($pattern, $replacement, $str);
$bad_words = array('dic', 'tit', $fuc,);
for($i = 0; $i < sizeof($bad_words); $i++)
{
if(preg_match("/$bad_words[$i]/", $str, $matches))
{
$rep = str_pad('', strlen($bad_words[$i]), '*');
$str = str_replace($bad_words[$i], $rep, $str);
}
}
echo $str;
这个想法是 $fuc 变成 fuc 然后我把它放在数组中然后数组完成它的工作,但这似乎不起作用。
【问题讨论】:
标签: php regex replace preg-replace preg-match