Pergunta

Ummm ... como faço para usar variáveis ??em uma chamada para preg_replace?

Isto não funcionou:

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

Sim, o $num é precedida por um sinal de mais. Sim, eu quero "tag the $num as <$text/>".

Foi útil?

Solução

Seu padrão de substituição parece ok, mas como você já usou aspas simples no padrão de correspondência, a variável $ num não será inserido nele. Em vez disso, tente

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

Além disso, observe que, quando a construção de um padrão de entradas de "desconhecidos" como este, é geralmente uma boa idéia usar preg_quote . por exemplo.

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

Embora eu acho que dado o nome da variável é sempre numérico no seu caso.

Outras dicas

As variáveis ??só será ampliado em cordas declaradas com aspas duplas . Assim, ou usar aspas duplas:

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

ou string uso de concatenação:

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

Você também deve dar uma olhada preg_quote se suas variáveis ??podem conter caracteres regulares expressão meta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top