我希望,有人知道,出了什么问题。我做了一个解析器来获取所有
<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。
答案 0 :(得分:0)
好的,我设法通过在我的正则表达式中添加更多字符来解决这个问题:
preg_match_all('/<a\s*[^\>]*href\s*\=\s*[\'"]?((?:http\:\/\/)?(?:[_\-a-zA-Z0-9\.]*[\?\=\&_a-zA-Z0-9\.\/]))*[\'"]/', $page, $matches);
我添加了一些空格符号,例如'=','&amp;'和'?'在链接主体中被授予。