Intereting Posts
Как получить заголовок страницы HTML с помощью php? Добавить как отдельные элементы корзины для продукта с пользовательскими данными в Woocommerce Как выполнить заключительные шаги в проекте разбивки на страницы? Как ускорить файл_get_contents? Как изменить корневой каталог www на WampServer 2.5 Фильтровать сообщения WordPress по расстоянию между координатами Использование PHP и Google Maps Api для определения расстояния между двумя почтовыми кодами (Великобритания) Можно ли ограничивать маршрут только для AJAX? подсчитывая количество выполняемых сценариев Отображение таблицы в PHP с повторяющимися столбцами json_encode не сохраняет порядок hasMany проблема отношений в Laravel 5.3 + библиотека MongoDB 'jenssegers / laravel-mongodb' Избегайте дублирования идентификаторов в PHP Установка RabbitMQ PHP: Неустранимая ошибка: Class 'AMQPConnection' не найден Как настроить макет для обработчика ошибок динамически без модуля

Preg_match_all <a href

Здравствуйте, я хочу извлечь ссылки <a href="/portal/clients/show/entityId/2121" > и я хочу, чтобы регулярное выражение, которое передало мне / portal / clients / show / entityId / 2121, номер 2121 в других ссылках разные идеи?

Регулярное выражение для разбора ссылок выглядит примерно так:

 '/<a\s+(?:[^"'>]+|"[^"]*"|'[^']*')*href=("[^"]+"|'[^']+'|[^<>\s]+)/i' 

Учитывая, насколько это ужасно, я бы рекомендовал использовать Simple HTML Dom для получения ссылок по крайней мере. Затем вы можете проверить ссылки, используя какое-то очень основное регулярное выражение на ссылке href.

Простой пример PHP PHP Parser :

 // Create DOM from string $html = str_get_html($links); //or $html = file_get_html('www.example.com'); foreach($html->find('a') as $link) { echo $link->href . '<br />'; } 

Не используйте регулярные выражения для обработки xml / html . Это можно сделать очень легко, используя встроенный синтаксический анализатор :

 $doc = new DOMDocument(); $doc->loadHTML($htmlAsString); $xpath = new DOMXPath($doc); $nodeList = $xpath->query('//a/@href'); for ($i = 0; $i < $nodeList->length; $i++) { # Xpath query for attributes gives a NodeList containing DOMAttr objects. # http://php.net/manual/en/class.domattr.php echo $nodeList->item($i)->value . "<br/>\n"; } 

Когда «разбор» html, я в основном полагаюсь на PHPQuery: http://code.google.com/p/phpquery/, а не на регулярное выражение.

Прокрутка ссылок из HTML может быть выполнена с помощью анализатора HTML.

Когда у вас есть все ссылки, просто получите индекс последней косой черты, и у вас есть свой номер. Нет необходимости в регулярном выражении.

Это мое решение:

 <?php // get links $website = file_get_contents("http://www.example.com"); // download contents of www.example.com preg_match_all("<a href=\x22(.+?)\x22>", $website, $matches); // save all links \x22 = " // delete redundant parts $matches = str_replace("a href=", "", $matches); // remove a href= $matches = str_replace("\"", "", $matches); // remove " // output all matches print_r($matches[1]); ?> 

Я рекомендую избегать использования синтаксических анализа на основе xml, потому что вы не всегда будете знать, был ли документ / сайт хорошо сформирован.

С наилучшими пожеланиями