2015-09-16 16 views
5

php'deki preg_replace işlevini kullanarak bir dizgiyi tam olarak eşleştirmeye çalışıyorum. Sadece tek bir '@' sembolüne sahip örnekleri eşleştirmek istiyorum. Ayrıca bir model olarak geçirilecek bir değişkeni de istiyorum.Şununla eşleşen: Preg_replace ile Tam Metin

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

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

sonuç sadece olmalıdır:

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

şimdiden teşekkürler.

cevap

4

ekle negatif $temp@ ile öncesinde ise bir maç başarısız olur look-behind(?<[email protected]) (@hello önce @ varsa, düz bir deyişle, ya, bunu eşleşmiyor):

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

bakın IDEONE demo

Ve burada sonunda tam kelime sınırını varsa,, ekleme Ayrıca a regex demo

olduğunu desen sonunasadece yerine etmediğinden emin olmak için:

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

çalıştı !! Teşekkür ederim! – sagnew

+0

Dinamikse, '$ temp'de' preg_quote() 'seçeneğini unutmayın. – HamZa