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

时间:2010-01-15 01:58:53

标签: php

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

$ var

的例子
$var = "<a href="http://stackoverflow.com/">Stack Overflow</a>"

我想要

$var2 = "http://stackoverflow.com/"

示例:preg_match();

还有什么?

5 个答案:

答案 0 :(得分:6)

而不是制作冗长复杂的正则表达式,而不是按步骤

进行
$str = '<a href="http://stackoverflow.com/"> Stack Overflow</a>';
$str = preg_replace("/.*<a\s+href=\"/","",$str);
print preg_replace("/\">.*/","",$str);

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

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

答案 1 :(得分:4)

如果它是您拥有的有效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;
        }
    }
}

产生以下内容:

Stack Overflow | href: http://stackoverflow.com/ 

答案 2 :(得分:1)

strip_tags()从变量值中删除HTML。如果您想要制作例外并保留某些标记,则第二个参数非常有用,例如p aragraph标记。

$text = '<p>Paragraph.</p> <!-- boo --> <a href="#">Other text</a>';
echo strip_tags($text); // Paragraph. Other text
echo strip_tags($text, '<p><a>'); // <p>Paragraph.</p> <a href="#">Other text</a>

phpQuery

如果您想远离正则表达式,可以使用phpQuery来处理该值,然后使用jQuery样式的选择器和方法来获取您的值:

// Bring in phpQuery
require("phpQuery-onefile.php");
// Load up our HTML
phpQuery::newDocumentHTML("<a href='http://sampsonresume.com/'>Homepage</a>");
// Print the HREF attribute of the first Anchor
print pq("a:first")->attr("href"); // http://sampsonresume.com/

正则表达式

您可以使用以下命令查找网址:

$var = "<a href='http://sampsonresume.com/'>Homepage</a>";
preg_match("(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)",$var,$match);
print $match[0]; // http://sampsonresume.com/

答案 3 :(得分:0)

使用以下正则表达式:

\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s]))

答案 4 :(得分:0)

<?php
preg_match_All("#<a\s[^>]*href\s*=\s*[\'\"]??\s*?(?'path'[^\'\"\s]+?)[\'\"\s]{1}[^>]*>(?'name'[^>]*)<#simU", $html, $hrefs, PREG_SET_ORDER);

foreach ($hrefs AS $urls){
 print $urls['path']."<br>";
}
?>