PHP регулярное выражение, чтобы соответствовать конкретному шаблону URL - PullRequest
0 голосов
/ 28 марта 2010

Я бы хотел "взять" несколько сотен URL-адресов с нескольких сотен HTML-страниц.

Шаблон:

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

Ответы [ 2 ]

3 голосов
/ 28 марта 2010

Вот как это сделать правильно с собственными расширениями 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 для каждой ситуации, которая выходит за рамки совпадения с шаблонным шаблоном строки из разметки.

1 голос
/ 28 марта 2010
'/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>'; 
...