<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作为结果?
谢谢。
答案 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上工作会更加安全。