获取A元素的href属性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

试图找到页面上的链接。

准则是:

/<a\s[^>]*href=(\"\'??)([^\"\' >]*?)[^>]*>(.*)<\/a>/

但似乎失败了

<a title="this" href="that">what?</a>

将如何更改我的正则表达式以处理未放在a标记中的href?

提问于
用户回答回答于

下面是代码:

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
    echo $dom->saveHtml($node), PHP_EOL;
}
echo $node->nodeValue; 

可以这样做。

echo $node->hasAttribute( 'href' );

href属性

echo $node->getAttribute( 'href' );

href属性

$node->setAttribute('href', 'something else');

href属性

$node->removeAttribute('href'); 

还可以查询href属性直接与XPath

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//a/@href');
foreach($nodes as $href) {
    echo $href->nodeValue;                       // echo current attribute value
    $href->nodeValue = 'new value';              // set new attribute value
    $href->parentNode->removeAttribute('href');  // remove attribute
}
用户回答回答于

可以试试这个:

/^<a.*?href=(["\'])(.*?)\1.*$/

.*?然后href=后面是环绕在任意一个的链接。"'

$str = '<a title="this" href="that">what?</a>';
preg_match('/^<a.*?href=(["\'])(.*?)\1.*$/', $str, $m);
var_dump($m);

输出:

array(3) {
  [0]=>
  string(37) "<a title="this" href="that">what?</a>"
  [1]=>
  string(1) """
  [2]=>
  string(4) "that"
}

扫码关注云+社区