2017-01-20 34 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))。 –