2017-01-20 32 views
1
$value['keyword']='P|$$';<br> 
$keyword = preg_quote($value['keyword'], '/');<br> 
$question = "verying P|$$ quedon";<br> 
echo $abc = preg_replace("/\b($keyword)\b/i",'<span style="color:red">$1</span>',$question);<br> 

我想串的紅顏色匹配關鍵字preg_replace函數的字符串PHP不是取代的特殊字符

+0

嘗試'「/(?<!\ w)($關鍵字)(?!\ w)/ i」'而不是'「/ \ b($關鍵字)\ b/i」'。 –

+0

'
'也會導致語法錯誤(雖然它們可能不在您的實際代碼中)? – segFault

+0

我試着用你的模式,但它只替換字符串P | $$中的「P」。 和其他特殊字符不以紅色代替。 –

回答

0

$後的字邊界需要一個字字符出現後的很對,所以沒有更換回吐放置在這裏。

您需要更換用的(?<!\w)(?!\w) lookarounds的幫助,如果關鍵字之前或之後用字字符將無法在比賽中定義明確的邊界字邊界:

$value['keyword']='P|$$'; 
$keyword = preg_quote($value['keyword'], '/'); 
$question = "verying P|$$ quedon"; 
echo $abc = preg_replace("/(?<!\w)($keyword)(?!\w)/i",'<span style="color:red">$1</span>',$question); 

PHP demo

+0

感謝它的工作 –

+0

很高興爲你效勞。請考慮通過點擊左側的✓接受答案(請參閱[如何接受所​​有答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work))。 –