Ammettiamo di avere una stringa di questo tipo:
_MATCH_MATCH_
e vogliamo trovare tutti i riferimenti di "MATCH" che siano circondati da "_". Vogliamo sostituire tutti questi riferimenti con "*".
preg_replace('/_MATCH_/', '*', $text);
# Risposta: "*MATCH_"Questo sistema non funziona, sia perchè sostituisce solo il primo "MATCH", sia perchè la sostituzione elimina anche i "_" (e non è quello che vogliamo fare).
La soluzione è questa:
preg_replace('/(?<=_)MATCH(?=_)/', '*', $text)
# Risposta: "_*_*_"Questa soluzione fa uso di due costrutti delle PERL REGEXP chiamati positive look-ahead "(?=" e positive look-behind "(?<=", che in pratica permettono di fare "ricerche all'indietro" e "ricerche in avanti" senza influenzare il match effettivo.
Una documentazione esauriente può essere trovata qui:


Aggiungi un commento