J'essaie d'utiliser une expression régulière pour effacer uniquement la partie correspondante d'une chaîne. J'utilise le preg_replace
et ont essayé de supprimer le texte correspondant en mettant des parenthèses autour de la partie correspondante. Exemple:
preg_replace('/text1(text2)text3/is','',$html);
Cela remplace cependant la chaîne entière par ''. Je veux seulement effacer text2, mais laisser text1 et text3 intacts. Comment puis-je faire correspondre et remplacer uniquement la partie de la chaîne qui correspond?
Il existe une alternative à l'utilisation de text1
et text3
dans le modèle de correspondance, puis les remettre via la chaîne de remplacement. Vous pouvez utiliser les assertions comme ceci:
preg_replace('/(?<=text1)(text2)(?=text3)/', "", $txt);
De cette façon, l'expression régulière recherche juste la présence -, mais ne prend pas en compte les deux chaînes lors de l'application du remplacement.
http://www.regular-expressions.info/lookaround.html pour plus d'informations.
Utilisez références arrières (c'est-à-dire les crochets) pour ne conserver que les parties de l'expression dont vous souhaitez vous souvenir. Vous pouvez rappeler le contenu de la chaîne de remplacement en utilisant $1
, $2
, etc.:
preg_replace('/(text1)text2(text3)/is','$1$2',$html);
Essaye ça:
$text = preg_replace("'(text1)text2(text3)'is", "$1$2", $text);
Esperons que ça marche!
Modifier: changé \\1\\2
à $1$2
qui est la méthode recommandée.