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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top