Вопрос

Я хотел бы перехватить все теги "dev" и их соответствующее содержимое с помощью php preg_match_all() но не могу получить вложенные файлы.

данные:

<dev>aaa</dev> <dev>bbb</dev> <dev> ccc <dev>ddd</dev> </dev>

мое выражение лица до сих пор:

|<dev>(.*)</dev>|Uis

спасибо, за вашу помощь, б.

Это было полезно?

Решение

Не используйте регулярные выражения для синтаксического анализа.Используйте реальный синтаксический анализатор, такой как DOMDocument ДОМДокумент или SimpleXML ( упрощенный ):

$xml = simplexml_load_string('<root>'.$str.'</root>');

Другие советы

У вас должен быть рекурсивный шаблон сопоставления:

/<dev>(.*|(?R))<\/dev>/i

Это просто поглотит все вложенные элементы, поэтому, если вы хотите затем проанализировать их, вам придется снова запустить функцию для $matches[1]

В * является жадным оператором, потребляет как можно больше символов.Вы должны использовать *? вместо этого используйте нежадную версию для поиска наименьших возможных совпадений.Возможно, регулярные выражения - не лучший инструмент для этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top