我很难在php中捕获preg_match()
组。
这是我的模式:
<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>
我错过了什么?
答案 0 :(得分:5)
虽然我同意上面的人告诉你不要使用正则表达式来解析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
)
我对你的模式所做的唯一改变是我使用了懒惰的量词*?而不只是*(这是贪婪的)。
<强>来源:强>
答案 1 :(得分:0)
您可能应该使用native SoapClient来使调用WebService更容易,并将结果作为PHP本机数据类型。
使用正则表达式解析XML或HTML通常是一个(非常)坏主意。