我想从一个页面抓取所有链接(href)。
这是我的实际代码:
preg_match_all('/href=.([^"\' ]+)/i', $content, $anchor);但它只获取域和子域(如name.name.ex或name.ex),但不获取自定义URL(如name.ex/name/name.php )。
有谁能帮忙处理正则表达式吗?
发布于 2013-12-22 14:49:29
我建议不要为此使用正则表达式。我建议您使用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
发布于 2013-12-22 17:13:19
使用DOMDocument更容易:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$linkNodes = $doc->getElementsByTagName('a');
foreach($linkNodes as $linkNode) {
$urls[] = $linkNode->getAttribute('href');
}
print_r($urls);发布于 2013-12-22 12:25:30
试试这个正则表达式:
$pattern = "/href="([^\s"]+)/";
preg_match_all($pattern, $content, $matches);
if (count($matches[1]) {
foreach($matches[1] as $match)
echo $match . "<br />";
}https://stackoverflow.com/questions/20729060
复制相似问题