2015-09-16 18 views
5

Próbuję dokładnie dopasować ciąg za pomocą funkcji preg_replace w php. Chcę tylko dopasować wystąpienia, które mają pojedynczy symbol "@". Wymagam również, aby zmienna była przekazywana jako wzorzec.Cant wydaje się pasować Dokładny ciąg z Preg_replace

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

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

wynik powinien być po prostu:

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

Z góry dziękuję.

Odpowiedz

4

Dodaj negatywny look-behind(?<[email protected]) że zawiedzie mecz jeśli $temp poprzedza @ (lub, w prostych słowach, jeśli istnieje @ przed @hello, nie dopasować go):

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

See IDEONE demo

A oto a regex demo

Ponadto, jeśli masz całą granicę słowa na końcu, dołącz \b do końca wzór wystarczy, aby zapewnić, że nie zastąpi :

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

Pracował !! Dziękuję Ci! – sagnew

+0

Nie zapomnij o 'preg_quote()' na '$ temp', jeśli jest dynamiczny. – HamZa

Powiązane problemy