抓取A元素的href属性
试图找到页面上的链接。
我的正则表达式是:
/<as[^>]*href=("'??)([^"' >]*?)[^>]*>(.*)</a>/
但似乎失败了
<a title="this" href="that">what?</a>
我如何改变我的正则表达式来处理不是首先放在标签中的href?
HTML的可靠正则表达式很困难。 以下是如何使用DOM做到这一点:
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
echo $dom->saveHtml($node), PHP_EOL;
}
以上将找到并输出$html
字符串中所有A
元素的“outerHTML”。
要获取节点的所有文本值,请执行
echo $node->nodeValue;
要检查 href
属性是否存在,你可以这样做
echo $node->hasAttribute( 'href' );
要获得 href
属性,你会这样做
echo $node->getAttribute( 'href' );
要改变你要做的href
属性
$node->setAttribute('href', 'something else');
要删除你要做的href
属性
$node->removeAttribute('href');
您还可以直接使用XPath查询href
属性
$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
}
另请参阅:
在旁注中:我确信这是重复的,你可以在这里找到答案
我同意戈登,你必须使用HTML解析器来解析HTML。 但是如果你真的想要一个正则表达式,你可以试试这个:
/^<a.*?href=(["'])(.*?)1.*$/
这与字符串开始处的<a
匹配,后跟任意数量的任何char(非贪婪) .*?
然后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"
}
你想要查找的模式将是链接锚点模式,例如(something):
$regex_pattern = "/<a href="(.*)">(.*)</a>/";
链接地址: http://www.djcxy.com/p/5065.html