Intereting Posts
Nginx или PHP FPM игнорирует memory_limit в php.ini Предотвращение инъекций SQL – GET_VARS Использование ZipStream в Symfony: потоковая загрузка zip не будет распаковываться с помощью утилиты архива на Mac OSX Ошибка HTTP 405.0 – метод не разрешен, с POST Когда мне нужно объявить session_start () ;? используйте preg_replace для замены целых слов с помощью ассоциативного массива Понимание логики foreach со ссылками – Почему первый элемент изменен на «два», второй на «три», а третий на «три3»? PHPMAILER SERVER -> SMTP ERROR: сбой парольной команды Не удалось выполнить SMTP-соединение () Как выполнить несколько вложений MySQL в PHP Динамическое создание / вставка в ассоциативный массив в PHP многомерный массив сообщения из формы Как определить, загружен ли файл PHP через cron / command line завершать длинные слова или длинные символы, игнорируя теги html Как реализовать функцию: отправить сообщение на форум по электронной почте? Создание UID внутри Laravel 5, как я могу увеличить его, чтобы снизить вероятность столкновения?

регулярное выражение 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>';