PHP Regex pour saisir {tag} {quelque chose / tag}
-
19-09-2019 - |
Question
Je suis en train de venir = avec une chaîne regex à utiliser avec les fonctions preg PHP (de preg_match, etc.) et je suis perplexe sur ceci:
Comment correspondent à cette chaîne:
{area-1}some text and maybe a <a href="http://google.com">link</a>.{/area-1}
Je veux la remplacer par une autre chaîne en utilisant preg_replace.
Jusqu'à présent, je suis en mesure d'identifier la première balise avec preg_match comme ceci:
preg_match("/\{(area-[0-9]*)\}/", $mystring);
Merci si vous pouvez aider!
La solution
Si vous n'avez pas les balises imbriquées, quelque chose ce simple devrait fonctionner:
preg_match_all("~{.+?}(.*?){/.+?}~", $mystring, $matches);
Vos résultats peuvent alors être trouvés dans $matches[1]
.
Autres conseils
Je suggère
preg_match_all("~\{(area-[0-9]*)\}(.*?)\{/\1\}~s", $mystring, $matches);
Cela même fonctionner si d'autres balises sont imbriquées dans la balise area
que vous regardez.
Si vous avez plusieurs balises area
imbriquées les unes dans les autres, il faudra encore travailler, mais vous aurez besoin d'appliquer les regex plusieurs fois (une fois pour chaque niveau d'imbrication).
Et bien sûr, le contenu des matchs seront $matches[2]
, pas $matches[1]
comme dans la réponse de Tatu.