2017-01-20 3 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

''/\ b($ keyword)\ b/i "'の代わりに '' /(?<!\ w)($ keyword)(?!\ w)/ i "'を試してみてください。 –

+0

'
'も構文エラーの原因になります(実際のコードではないでしょうか?)。 – segFault

+0

私はあなたのパターンを試しましたが、文字列P | $$の "P"だけを置き換えました。 などの特殊文字は赤色で置き換えられません。 –

答えて

0

ワード境界はそれの後に右表示される単語文字が必要なので、代替はありません。撮影はありませんここに置いてください。

あなたはキーワードが単語文字で前または後ている場合は、一致に失敗します(?<!\w)(?!\w)前後参照の助けを借りて、定義された明確な境界で単語の境界を交換する必要があります。

$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)参照)。 –

関連する問題