过滤确切的单词不是全字

时间:2014-10-03 10:06:45

标签: php html regex

想要仅替换数组列表中的精确单词,当前代码工作期望它检查全字内容并替换:(

实施例: -

$ 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);

我认为模式不正确,可以帮助我找到正确的模式或任何有效的代码应用

1 个答案:

答案 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);

Test at eval.in