2015-09-16 12 views
5

phpのpreg_replace関数を使って文字列を正確にマッチさせようとしています。 私は単一の「@」記号を持つインスタンスだけを一致させたいと思う。 パターンとして渡す変数も必要です。カントが正確な文字列とPreg_replaceと一致するようです

$x = "@hello, @@hello, @hello, @@hello" 
$temp = '@hello' 

$x = preg_replace("/".$temp."/", "replaced", $x); 

結果はちょうど次のようになります。

$x = "replaced, @@hello, replaced, @@hello" 

は、事前にありがとうございます。

答えて

4

追加負$temp@で先行している場合、一致を失敗しますlook-behind(?<[email protected])@hello@がある場合は、平野言葉で、または、それに一致しない):

$x = "@hello, @@hello, @hello, @@hello"; 
$temp = '@hello'; 
$x = preg_replace("/(?<[email protected])".$temp."/", "replaced", $x); 
echo $x; 

参照してください。 IDEONE demo

そして、ここでまたa regex demo

で、あなたが最後に全体のワード境界を持っている場合は、を追加ちょうどあなたが代わるものではありません確実にするために、パターンの最後に:勤務

"/(?<[email protected])".$temp."\\b/" 
+1

を!ありがとうございました! – sagnew

+0

動的であれば '$ temp'で' preg_quote() 'を忘れないでください。 – HamZa

関連する問題