preg_match_all在同一行

时间:2014-09-26 13:07:22

标签: php preg-match-all implode

我有:

<a href="http://www.test.com/performers/test-1/" title="">test 1</a>                                <a href="http://www.test.com/performers/test-2/" title="">test 2</a>

我想要标题1,标题2作为结果。

我写道:

$m=array();
preg_match_all('/<a href="http:\/\/www.test.com\/performers\/(.*)\/" title="">(.*)<\/a>/i', $buff,$m);
$info['models'] = implode(',', $m[2]);

结果我只获得了第2名。

但如果标题1和标题2的html代码不在同一行,我会得到标题1,标题2.

当所有html代码在同一行时,如何获得标题1,标题2作为结果?

谢谢。

1 个答案:

答案 0 :(得分:0)

问题是正则表达式的贪婪。正则表达式中的(.)*部分与test-1/" title="">test 1</a> <a href="http://www.test.com/performers/test-2匹配,而不是test-1。如果您将修改器U添加到模式中,则正则表达式可以正常工作。但是你应该在你的正则表达式中逃避更多的字符,即所有点都匹配任何字符,而不仅仅是一个点:

$m = array();
preg_match_all('/<a\ href="http:\/\/www\.test\.com\/performers\/(.*)\/"\ title="">(.*)<\/a>/Ui', $buff,$m);
$info['models'] = implode(',', $m[2]);

而且,公平地说,在DOM上工作会更加安全。