preg_match für verschachtelte HTML-Tags
-
07-07-2019 - |
Frage
Ich möchte alle „dev“ Tags und ihren jeweiligen Inhalt, durch php preg_match_all()
fangen, aber die verschachtelt diejenigen nicht erhalten können.
Daten:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
mein Ausdruck so weit:
|<dev>(.*)</dev>|Uis
Danke für Ihre Hilfe, b.
Lösung
Verwenden Sie keine regulären Ausdrücke für das Parsen. Verwenden Sie einen echten Parser wie DOMDocument oder SimpleXML :
$xml = simplexml_load_string('<root>'.$str.'</root>');
Andere Tipps
Sie benötigen ein rekursiven Anpassungsmuster haben:
/<dev>(.*|(?R))<\/dev>/i
Das wird nur saugen alle verschachtelten Elemente, also wenn Sie wollen, dann diejenigen analysieren, werden Sie die Funktion wieder auf $ treffer [1]
laufen müssen Die *
ist ein gieriger Operator, verbraucht so viele Zeichen wie möglich. Sie sollten die *?
nicht gierige Version verwenden, anstatt die kleinsten möglichen Übereinstimmungen zu finden. Vielleicht Regexes sind nicht die besten Werkzeuge, um dies zu tun.