2012-08-06 66 views
1

我想在PHP中使用的preg_replace突出我的關鍵字搜索文本,但問題是它不會帶括號串()如何突出使用PHP preg_replace括號的搜索關鍵字?

我的功能看起來像這樣工作...

$text_oritinal = "25 Hours: Colour In White (CD)"; 

function highlight($text_search, $text_original) { 
    $str = preg_replace('#'. $text_search .'#i', '<span style="background-color:#FFFF66; color:#FF0000;">\\0</span>', $text_original); 
    return $str; 
} 

全部原文爲"25 Hours: Colour In White (CD)"

例如。如果我使用關鍵字

$text_search = "25 Hours: Colour In White"; 

它返回替換良好的關鍵字與高亮背景和文本顏色。

<span style="background-color:#FFFF66; color:#FF0000;">25 Hours: Colour In White</span> (CD) 

但是!如果我用這個關鍵字的括號字符串()

$text_search = "25 Hours: Colour In White (CD)"; 

它不會返回更換背景和文本顏色。

我認爲它堅持了括號串()

是如何突出而不帶括號串()任何問題匹配的所有文本關鍵字的問題?

請分享你的想法。謝謝:)

+1

編輯時不要刪除您的問題。它使問題無用。 – 2012-08-06 14:53:41

+0

我會照你的評論來做。謝謝。 – thegodth 2012-08-06 15:10:36

回答

3

你應該叫preg_quote

function highlight($text_highlight, $text_search) { 
    $str = preg_replace('#'. preg_quote($text_highlight) .'#i', '<span style="background-color:#FFFF66; color:#FF0000;">\\0</span>', $text_search); 
    return $str; 
} 

說明:

括號用於創建submatches 。在搜索字符串中使用它們將導致不希望的結果,因爲它們是保留字符。您可以通過使用preg_quote來防止這些字符和其他字符,它們會轉義正則表達式保留字符。

+0

你的回答是正確的解釋。謝謝。 – thegodth 2012-08-06 15:04:25