我想从页面中获取所有链接(href)。
这是我的实际代码:
preg_match_all('/href=.([^"\' ]+)/i', $content, $anchor);
但是这只会抓取域名和子域名(例如name.name.ex
或name.ex
),但不会获取name.ex/name/name.php
等自定义网址。
任何人都可以帮助正则表达式吗?
答案 0 :(得分: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
答案 1 :(得分:1)
使用DOMDocument更容易:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$linkNodes = $doc->getElementsByTagName('a');
foreach($linkNodes as $linkNode) {
$urls[] = $linkNode->getAttribute('href');
}
print_r($urls);
答案 2 :(得分:0)
试试这个正则表达式:
$pattern = "/href="([^\s"]+)/";
preg_match_all($pattern, $content, $matches);
if (count($matches[1]) {
foreach($matches[1] as $match)
echo $match . "<br />";
}
答案 3 :(得分:0)
你走了!
$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;
}