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!

Était-ce utile?

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.

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