Использование 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>/'
[^<]
захватывает все символы, кроме <
,