preg_match для вложенных тегов html - PullRequest
0 голосов
/ 14 сентября 2009

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

данные:

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

Мое выражение лица:

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

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

Ответы [ 3 ]

7 голосов
/ 14 сентября 2009

Не используйте регулярные выражения для разбора. Используйте настоящий анализатор, такой как DOMDocument или SimpleXML :

$xml = simplexml_load_string('<root>'.$str.'</root>');
1 голос
/ 26 января 2010

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

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

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

0 голосов
/ 14 сентября 2009

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

...