【问题标题】:Grab all links from a page抓取页面中的所有链接
【发布时间】:2014-01-10 19:36:54
【问题描述】:
我想从页面中获取所有链接(href)。
这是我的实际代码:
preg_match_all('/href=.([^"\' ]+)/i', $content, $anchor);
但这仅抓取域和子域(如 name.name.ex 或 name.ex),但不抓取自定义 URL,如 name.ex/name/name.php。
谁能帮忙解决正则表达式?
【问题讨论】:
标签:
php
regex
url
preg-match-all
【解决方案1】:
试试这个正则表达式:
$pattern = "/href="([^\s"]+)/";
preg_match_all($pattern, $content, $matches);
if (count($matches[1]) {
foreach($matches[1] as $match)
echo $match . "<br />";
}
【解决方案2】:
给你!
$string = "<a href='test.php/url' class=>test</a>testar <a href='test2.php/url2' class=>test</a>";
$pattern = "/<a(?:[^>]*)href=([^ ]*)(?:[^>]*)>/";
preg_match_all($pattern, $string, $matches);
foreach($matches[1] as $match){
echo $match;
}
【解决方案3】:
我建议不要为此使用正则表达式。我建议你使用DOM 来解析并得到你的结果。
以下是使用DOM 和XPath 的示例
$html = '<a href="name.ex/name/name.php">text</a>
<a href="foo.com">foobar</a>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//a') as $link) {
$links[] = $link->getAttribute('href');
}
print_r($links);
见Working demo
【解决方案4】:
使用DOMDocument更方便:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$linkNodes = $doc->getElementsByTagName('a');
foreach($linkNodes as $linkNode) {
$urls[] = $linkNode->getAttribute('href');
}
print_r($urls);