Utiliser $ variables dans preg_replace en PHP
-
05-07-2019 - |
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/>
&";
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.