从$ var中提取HTML的最佳方法是什么?
$ var
的例子$var = "<a href="http://stackoverflow.com/">Stack Overflow</a>"
我想要
$var2 = "http://stackoverflow.com/"
示例:preg_match();
还有什么?
答案 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来处理该值,然后使用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>";
}
?>