2011-06-27 58 views
0
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. 我可以檢查空間,但如果短語以。結尾,怎麼辦?要麼 !等等。

回答

1

使用\b模式來匹配單詞邊界,也就是你的情況/\b(new car)\b/將匹配

  • 「的新車是藍色的」
  • 「的新車。」
  • 新車

但不

  • 「所有的新車」。
0

(?!\w)加到正則表達式中。這會使它僅在短語後跟非單詞字符[^a-zA-Z0-9_]時才匹配。

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