想要仅替换数组列表中的精确单词,当前代码工作期望它检查全字内容并替换:(
实施例: -
$ String =这是一个测试,快乐测试
它将取代"测试"作为t - ting并测试为t - t
想要出局: - 仅过滤测试为t - t,当过滤词包含其他字符时忽略
代码
function filter($string) {
$wordlist = array(
'test' => 't--t'
);
foreach ($wordlist as $word => $filter) {
$word = "/{$word}/";
preg_match_all($word, $string, $matches);
foreach ($matches[0] as $bword) {
$pattern = "/{$bword}/";
$string = preg_replace($pattern, $filter, $string);
}
}
return $string;
}
echo filter($string);
我认为模式不正确,可以帮助我找到正确的模式或任何有效的代码应用
答案 0 :(得分:0)
假设Extract = Exact
=错误?
如果您想匹配确切的字词,请使用word boundaries。
/\btest\b/
匹配"确切" test
。要匹配无外壳添加i
flag:/\btest\b/i
另请注意,您可以使用preg_replace() function的数组。所以功能可以是:
$string= "This is a testing ,Happy test";
function filter($string)
{
$wordlist = array(
'/\btest\b/' => 't--t'
);
return preg_replace(array_keys($wordlist), array_values($wordlist), $string);
}
echo filter($string);