регулярное выражение php для соответствия определенному шаблону url

Я бы хотел «захватить» несколько сотен 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>';