如何使用PHP从HTML中提取href


How to extract hrefs from HTML with PHP

>假设我有一个有效的html文件,我把它保存到一个字符串中。现在我想提取锚元素 (href) 的链接。因此,我想使用纯正则表达式。

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 字符串操作:提取 hrefs)但我希望有没有这些/任何库的解决方案,只有正则表达式。我必须做什么来解决我的正则表达式问题?

我从第一个"到下一个"思考。但是如何创建该模式或另一种模式来解决问题呢?

[编辑:]解决方案

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

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

Musa 是正确的,因为句点 (.) 是贪婪的。 尝试 [A-Za-z0-9_]+ 而不是 .+