preg_match pour les balises HTML imbriquées
-
07-07-2019 - |
Question
Je voudrais attraper tous les & "; dev &"; balises et leur contenu respectif, via php preg_match_all()
mais ne peuvent pas obtenir les imbriquées.
données:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
mon expression jusqu'à présent:
|<dev>(.*)</dev>|Uis
merci pour votre aide, b.
La solution
Ne pas & # 8217; ne pas utiliser d’expressions régulières pour l’analyse. Utilisez un analyseur syntaxique réel comme DOMDocument ou SimpleXML :
$xml = simplexml_load_string('<root>'.$str.'</root>');
Autres conseils
Vous devez avoir un motif de correspondance récursif:
/<dev>(.*|(?R))<\/dev>/i
Cela va juste aspirer tous les éléments imbriqués, donc si vous voulez ensuite les analyser, vous devrez relancer la fonction sur $ matches [1]
Le *
est un opérateur glouton, qui utilise le plus de caractères possible. Utilisez plutôt la version *?
non-gloutonne pour trouver les correspondances les plus petites possibles. Les regex ne sont peut-être pas les meilleurs outils pour le faire.