Хотя я согласен с вышеупомянутыми людьми, которые советуют вам не использовать регулярные выражения для разбора 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
)
Единственные изменения, которые я внес в ваш шаблон, это то, что я использовал ленивый квантификатор *? вместо просто * (который жадный).
Источники: