preg_match_all函数给出了我可能的261的第159个结果

时间:2013-10-31 02:15:00

标签: php regex curl html-parsing preg-match-all

我希望,有人知道,出了什么问题。我做了一个解析器来获取所有

<a href="blabla">Link</a>

标记。我在http://www.bbc.co.uk/上测试它。我测试的页面上有261个,我只收到了第一个159.我手动检查了它,我发现它们中的每一个,但我生成的数组只有159个元素。这个限制的原因是什么?

preg_match_all('/<a\s[^\>]*href\=[\'"]?((?:http\:\/\/)?(?:[_\-a-zA-Z0-9\.]*[_a-zA-Z0-9\.\/]))*[\'"]/', $page, $matches);

我查了一下,curl给了我

的所有页面
<html>

,直到

</html>

问题是使解析器没有任何DOM使用,只需要curl和regexp。

1 个答案:

答案 0 :(得分:0)

好的,我设法通过在我的正则表达式中添加更多字符来解决这个问题:

preg_match_all('/<a\s*[^\>]*href\s*\=\s*[\'"]?((?:http\:\/\/)?(?:[_\-a-zA-Z0-9\.]*[\?\=\&_a-zA-Z0-9\.\/]))*[\'"]/', $page, $matches);

我添加了一些空格符号,例如'=','&amp;'和'?'在链接主体中被授予。