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 ;.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top