2010-08-14 162 views
1

我想从搜索结果中找到链接。有人可以请正则表达式来帮忙吗?我已经得到了这一点,这是行不通的:在PHP中搜索Google搜索结果

preg_match_all("/<h3(.*)><a href=\"(.*)\"(.*)<\/h3>/", $result, $matches); 
+0

尝试获取每个搜索结果(而不是adwords)的网址。 – Alex 2010-08-14 04:43:30

+1

您无法真正使用正则表达式进行HTML解析。使用[DOM扩展](http://www.php.net/manual/en/book.dom.php)或其他DOM解析器。 – 2010-08-14 04:52:03

+4

为什么当有Google API让搜索结果变得更容易时,您必须搜索搜索结果? http://code.google.com/apis/ajaxsearch/web.html – stillstanding 2010-08-14 05:07:34

回答

5

你的模式很可能具有贪婪VS它慵懒自然的,因为最大的问题。它更改为以下要解决这个问题......

preg_match_all('#<h3.*?><a href="(.*?)".*?</h3>#', $result, $matches); 
print_r($matches[1]); 

有可能,可以乱的格局了一些罕见的网址,但机会是你会不会碰上一个。我会指出,仍然有一个好点,但使用API​​将是一个更好的选择。

至于那些覆盖着“你不能用正则表达式解析HTML,使用DOM”的人......虽然你不能创建一个通用的HTML解析器(并且应该使用DOM来完成该任务),但你可以匹配你知道一组文本中的模式遵循一定的结构,结构是HTML的事实是不相关的。是的,如果谷歌改变他们的布局,它可能会中断,但这也可能是一个DOM解析器。 (P.S.我很清楚这可能会被裁员投票)。

+1

+1反击正则表达式仇敌!有时候,如果你不试图完全解析DOM,那么在HTML上使用正则表达式是合适的。 – 2010-08-15 22:28:09

+0

我爱你。这是我正在寻找的正则表达式。如果有代码可以获得下一个链接,那将很酷。 谢谢:) – Herr 2011-05-05 07:34:20