Question

Hmm ... comment utiliser les variables dans un appel à preg_replace?

Cela n'a pas fonctionné:

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

Oui, le $num est précédé d'un signe plus. Oui, je souhaite & "; tag the $num as <$text/> &";

.
Était-ce utile?

La solution

Votre modèle de remplacement semble correct, mais comme vous avez utilisé des guillemets simples dans le modèle correspondant, votre variable $ num n'y sera pas insérée. Au lieu de cela, essayez

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

Notez également que lors de la création d'un motif à partir de & "inconnu &"; De telles entrées, c’est généralement une bonne idée d’utiliser preg_quote . par exemple

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

Cependant, étant donné le nom de la variable, il est toujours numérique dans votre cas.

Autres conseils

Les variables ne seront développées que dans chaînes déclarées avec des guillemets doubles . Donc, utilisez des guillemets doubles:

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

Ou utilisez la concaténation de chaînes:

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

Vous devriez également jeter un coup d'œil à preg_quote si vos variables peuvent contenir des méta-caractères d'expression régulière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top