2014-10-03 80 views
0

想在数组列表只更换原话,目前的代码工作指望它检查全字内容和替换:(筛选确切的词不是全字

例子: -

$字符串=这是一个测试,快乐测试

它将取代“试”为T - 廷和测试为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); 

我觉得模式是不正确的,能不能帮我找到正确的模式或任何工作代码applicate

回答

0

假设Extract = Exact =错字?

如果您想匹配确切的单词,请使用word boundaries

/\btest\b/匹配“确切”test。还要匹配无情的添加iflag/\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

+0

不工作的非英文字符/词 – 2014-10-03 11:01:10

+0

@Randy Suitt您的意见是utf-8?比使用'u' [modifier](http://php.net/manual/en/reference.pcre.pattern.modifiers.php):'/ \ btest \ b/u'注意,pattern和input都有如果是的话就是utf-8。或者'/ \ btest \ b/ui'用于utf-8和无格式匹配。 – 2014-10-03 11:02:51

+0

@RandySuitt如果在编辑器中输入ASCII并输入UTF-8,则只需要utf-8对图案进行编码。 ' '/\b'.utf8_encode("wörd“)。' \ B/ui'' – 2014-10-03 11:11:35