Я бы хотел «захватить» несколько сотен URL-адресов с нескольких сотен html-страниц.
Шаблон:
<h2><a href="http://www.the.url.might.be.long/urls.asp?urlid=1" target="_blank">The Website</a></h2>
Вот как это сделать с помощью собственных расширений 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")]'
Обратите внимание, что использование Regex для соответствия HTML – это путь к безумию. Regex сопоставляет строковые шаблоны и ничего не знает о элементах и атрибутах HTML. DOM, поэтому вы должны предпочесть его над Regex для каждой ситуации, которая выходит за рамки соответствия суперпривальной строки шаблона Markup.
'/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>';