php正则表达式匹配特定的url模式

时间:2010-03-28 08:56:44

标签: php regex url pattern-matching

我想从几百个HTML页面中“抓取”几百个网址。

模式:

<h2><a href="http://www.the.url.might.be.long/urls.asp?urlid=1" target="_blank">The Website</a></h2>

2 个答案:

答案 0 :(得分:3)

以下是如何使用原生DOM扩展正确完成

// GET file
$doc = new DOMDocument;
$doc->loadHtmlFile('http://example.com/');

// Run XPath to fetch all href attributes from a elements
$xpath = new DOMXPath($doc);
$links = $xpath->query('//a/@href');

// collect href attribute values from all DomAttr in array
$urls = array();
foreach($links as $link) {
    $urls[] = $link->value;
}
print_r($urls);

请注意,上面也会找到相关链接。如果您不希望那些将Xpath调整为

'//a/@href[starts-with(., "http")]'

请注意,使用正则表达式匹配HTML是疯狂之路。正则表达式匹配字符串模式,对HTML元素和属性一无所知。 DOM确实如此,这就是为什么你应该更喜欢它而不是匹配来自Markup的超级字符串模式的每种情况。

答案 1 :(得分:1)

'/http:\/\/[^\/]+/[^.]+\.asp\?urlid=\d+/'

但最好使用HTML Parser,这是PHP Simple HTML DOM

的示例
$html = file_get_html('http://www.google.com/');

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>';