Использование PHP регулярных выражений для анализа XML

Как я могу использовать регулярное выражение для разбора XML?

Предположим, у нас есть следующее:

$string = '<z>1a<z>2b</z>3c<z>4d</z>5e</z>';
preg_match_all('/<z>(.+)<\/z>/', $string, $result_a);
preg_match_all('/<z>(.+)<\/z>/U', $string, $result_b);
preg_match_all($regex, $string, $result_x);

Если я выполню это, то $result_a будет содержать строку (среди элементов массива):

'1a<z>2b</z>3c<z>4d</z>5e'

Кроме того, переменная $result_b будет иметь строки (среди элементов массива):

'1a<z>2b'
'4d'

Теперь я хочу $result_x иметь '2b' и '4d' отдельно среди элементов массива.

Что должно $regex выглядит как?

Заранее спасибо!!!

2 ответа

Используйте не жадный квантификатор:

'/<z>(.+?)<\/z>/'
     ___^

или измените точку классом отрицательных символов:

'/<z>([^z]+)<\/z>/'

или же

'/<z>([^<>]+?)<\/z>/'

или, что гораздо удобнее, используйте парсер xml

В этом случае вы можете использовать не жадный квантификатор или использовать это альтернативное регулярное выражение:

'/<z>([^<]+)<\/z>/'

[^<] захватывает все символы, кроме <,

Другие вопросы по тегам