Usando $ variabili in preg_replace in PHP
-
05-07-2019 - |
Domanda
Ummm ... come posso usare le variabili in una chiamata a preg_replace?
Questo non ha funzionato:
foreach($numarray as $num => $text)
{
$patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
$replacements[] = '<ces>$1<$text/>$2</ces>';
}
Sì, $num
è preceduto da un segno più. Sì, voglio & Quot; tag the $num as <$text/>
& Quot ;.
Soluzione
Il tuo modello di sostituzione sembra a posto, ma poiché hai usato virgolette singole nel modello di corrispondenza, la tua variabile $ num non verrà inserita in esso. Invece, prova
$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
Si noti inoltre che quando si crea un modello da " sconosciuto " input come questo, di solito è una buona idea usare preg_quote . per es.
$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';
Anche se suppongo che dato il nome della variabile sia sempre numerico nel tuo caso.
Altri suggerimenti
Le variabili verranno espanse solo in stringhe dichiarate con virgolette doppie . Quindi utilizzare entrambe le virgolette doppie:
$patterns[] = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
$replacements[] = "<ces>$1<$text/>$2</ces>";
Oppure usa la concatenazione di stringhe:
$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
Dovresti anche dare un'occhiata a preg_quote
se le tue variabili possono contenere meta caratteri di espressioni regolari.