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

Я как бы застрял в захвате группы с 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> 

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

Хотя я согласен с людьми выше, которые говорят вам не использовать регулярные выражения для синтаксического анализа 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 ) 

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

Источники:

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

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