группа захвата php - PullRequest
       9

группа захвата php

1 голос
/ 02 августа 2010

Я как бы застрял, захватив группу с preg_match() в php.

Это мой шаблон:

<ns2:uniqueIds>(.*)<\/ns2:uniqueIds>

И это источник:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Header/><env:Body><ns2:ListResponse xmlns:ns2="http://censored"><ns2:uniqueIds>censored</ns2:uniqueIds><ns2:uniqueIds>censored</ns2:uniqueIds></ns2:ListResponse></env:Body></env:Envelope>

Чего мне не хватает?

Ответы [ 2 ]

5 голосов
/ 02 августа 2010

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

Пример интерпретатора PHP:

php > $s = '<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"><env:Header/><env:Body><ns2:ListResponse xmlns:ns2="http://censored"><ns2:uniqueIds>censored</ns2:uniqueIds><ns2:uniqueIds>censored</ns2:uniqueIds></ns2:ListResponse></env:Body></env:Envelope>';
php > $p = '#<ns2:uniqueIds>(.*?)<\/ns2:uniqueIds>#i';
php > $a = array();
php > preg_match($p, $s, $a);
php > print_r($a);
Array
(
    [0] => <ns2:uniqueIds>censored</ns2:uniqueIds>
    [1] => censored
)

Единственные изменения, которые я внес в ваш шаблон, это то, что я использовал ленивый квантификатор *? вместо просто * (который жадный).

Источники:

0 голосов
/ 02 августа 2010

Возможно, вам следует вместо этого использовать собственный SoapClient , чтобы упростить как вызов WebService, так и получение результата в виде собственного типа данных PHP.

Использование регулярных выражений для разбора XML или HTML обычно является (очень) плохой идеей.

...