Pregunta

Ummm ... ¿cómo uso variables en una llamada a preg_replace?

Esto no funcionó:

foreach($numarray as $num => $text)
    {
        $patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
        $replacements[] = '<ces>$1<$text/>$2</ces>';
    }

Sí, el $num está precedido por un signo más. Sí, quiero & Quot; tag the $num as <$text/> & Quot ;.

¿Fue útil?

Solución

Su patrón de reemplazo se ve bien, pero como ha usado comillas simples en el patrón coincidente, su variable $ num no se insertará en él. En su lugar, intente

$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

También tenga en cuenta que al construir un patrón desde " desconocido " entradas como esta, generalmente es una buena idea usar preg_quote . por ejemplo,

$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';

Aunque supongo que dado el nombre de la variable siempre es numérico en su caso.

Otros consejos

Las variables solo se expandirán en cadenas declaradas con comillas dobles . Entonces, use comillas dobles:

$patterns[]     = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
$replacements[] = "<ces>$1<$text/>$2</ces>";

O use la concatenación de cadenas:

$patterns[]     = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

También debe echar un vistazo a preg_quote si sus variables pueden contener metacaracteres de expresión regular.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top