【问题标题】:How to extract hrefs from HTML with PHP如何使用 PHP 从 HTML 中提取 href
【发布时间】:2013-10-28 17:01:06
【问题描述】:

假设我有一个有效的 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);

【问题讨论】:

    标签: php html regex anchor href


    【解决方案1】:

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

    【讨论】:

    • 因为我认为这是在没有 domdocument 的情况下执行此操作的要求。这太容易了。
    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 2017-04-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 2020-06-30
    • 2011-11-18
    相关资源
    最近更新 更多