从HTML字符串中提取链接属性

ale*_*xus 5 php

从$ var中提取HTML的最佳方法是什么?

$ var的例子

$var = "<a href="http://stackoverflow.com/">Stack Overflow</a>"
Run Code Online (Sandbox Code Playgroud)

我想要

$var2 = "http://stackoverflow.com/"
Run Code Online (Sandbox Code Playgroud)

例如:preg_match();

还有什么?

gho*_*g74 7

而不是制作长而复杂的正则表达式,而是分步进行

$str = '<a href="http://stackoverflow.com/"> Stack Overflow</a>';
$str = preg_replace("/.*<a\s+href=\"/","",$str);
print preg_replace("/\">.*/","",$str);
Run Code Online (Sandbox Code Playgroud)

一种"非正则表达"的方式,使用爆炸

$str = '<a href="http://stackoverflow.com/"> Stack Overflow</a>';
$s = explode('href="',$str);
$t = explode('">',$s[1]);
print $t[0];
Run Code Online (Sandbox Code Playgroud)


zom*_*bat 5

如果您拥有的是有效的HTML字符串,则DOMDocument模块的loadHTML()函数将起作用,并且您可以非常轻松地导航结构。如果您有很多HTML可以使用,那么这是一个很好的方法。

$doc = new DOMDocument();
$doc->loadHTML('<a href="http://stackoverflow.com/">Stack Overflow</a>');
$anchors = $doc->getElementsByTagName('a');
foreach($anchors as $node) {
    echo $node->textContent;
    if ($node->hasAttributes()) {
        foreach($node->attributes as $a) {
            echo ' | '.$a->name.': '.$a->value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

产生以下内容:

Stack Overflow | href: http://stackoverflow.com/ 
Run Code Online (Sandbox Code Playgroud)