如何使用PHP从HTML中提取hrefs

时间:2013-10-20 03:23:44

标签: php html regex anchor href

假设我有一个有效的htmlfile,我将其保存为字符串。现在我想提取锚元素(hrefs)的链接。因此我想使用纯正则表达式。

preg_match_all('/<a [^>]*href="(.+)">/', $html, $match);

通常我想收到这样的字符串:

http://www.thisIsAHrefLinkIWantToHave.de

但我收到了以下字符串,由正则表达式中的(。+)引起的逻辑:

index?a=f">Link</a> &nbsp; <a href="index?a=ds">Link 2</a> &nbsp; <a href="index?b=b">Link 3</a> &nbsp; <a href="index?gf=d">Link 4</a> &nbsp; <a href="index?ttt=q">Link 5</a> &nbsp; <a href="index?g=my">Link 6</a> &nbsp; <a href="http://mysite.org

我找到了像Xpath或DOMDocument这样的解决方案 PHP String Manipulation: Extract hrefs)但我想要没有那些/任何库的解决方案,只需要正则表达式。我必须做些什么才能解决我的正则表达式问题?

我从第一个“到下一个”想到了。但是如何创建该模式或其他模式,解决了这个问题?

[编辑:] 解决方案

preg_match_all('/<a [^>]*href="([A-Za-z0-9\/?=:&_.]+)?"/', $html, $match);

2 个答案:

答案 0 :(得分:1)

尝试preg_match_all('/<a [^>]*href="(.+)?">/', $html, $match);?使.*非贪婪。

答案 1 :(得分:0)

穆萨是正确的,因为期间(。)是贪婪的。尝试[A-Za-z0-9 _] +而不是。+