php捕获组

时间:2010-08-02 09:40:34

标签: php preg-match regex-group

我很难在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>

我错过了什么?

2 个答案:

答案 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通常是一个(非常)坏主意。