突出短语或单词问题

时间:2011-06-27 18:24:26

标签: regex preg-replace

function highlight_phrase($str, $phrase, $class='highlight') 
{ 
     if ($str == '') 
     { 
         return ''; 
     } 

     if ($phrase != '') 
     { 
         return preg_replace('/('.preg_quote($phrase, '/').')/Ui', '<span class="'.$class.'">'."\\1".'</span>', $str); 
     }  
     return $str; 
} 

上面的代码是我用来突出字符串中的短语。我对以下问题有疑问:

  1. 如果短语是新车,它会匹配新车和新车的字符串,这意味着它突出了新车的新车,但我不需要突出新车。

  2. 我可以检查空间,但如果短语结束了,那该怎么办?要么 !等

2 个答案:

答案 0 :(得分:1)

使用\b模式匹配字边界,即在您的情况下/\b(new car)\b/将匹配

  • 新车是蓝色的”
  • 新车。”
  • 新车

但不是

  • “所有新车”。

答案 1 :(得分:0)

(?!\w)添加到正则表达式。这将使其仅在短语后跟非单词字符[^a-zA-Z0-9_]时匹配。

return preg_replace('/('.preg_quote($phrase, '/')(?!\w)')/Ui', '<span class="'.$class.'">'."\\1".'</span>', $str);