Использование PHP регулярных выражений для анализа XML - PullRequest
0 голосов
/ 16 сентября 2011

Как я могу использовать регулярное выражение для разбора 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 ]

3 голосов
/ 16 сентября 2011

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

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

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

3 голосов
/ 16 сентября 2011

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

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

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

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

или

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

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

...