Preg_match_all Прег_матч_алл
-
19-09-2019 - |
Вопрос
Здравствуйте, я хочу извлечь ссылки
<a href="/portal/clients/show/entityId/2121" >
и я хочу регулярное выражение, которое выдает мне / portal/clients /show /EntityId / 2121
последнее число 2121 в других ссылках отличается
есть идеи?
Решение
Регулярное выражение для синтаксического анализа ссылок выглядит примерно так:
'/<a\s+(?:[^"'>]+|"[^"]*"|'[^']*')*href=("[^"]+"|'[^']+'|[^<>\s]+)/i'
Учитывая, насколько это ужасно, я бы рекомендовал использовать Простой HTML-Dom по крайней мере, для получения ссылок.Затем вы могли бы проверять ссылки, используя какое-нибудь очень простое регулярное выражение в ссылке href.
Другие советы
Простой анализатор PHP HTML Dom пример:
// 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.Это можно сделать очень легко, используя встроенный анализатор dom:
$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/ скорее, чем регулярное выражение.
Это мое решение:
<?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, потому что вы не всегда будете знать, правильно ли сформирован документ / веб-сайт.
С наилучшими пожеланиями
Удаление ссылок из HTML можно выполнить с помощью am HTML parser.
Когда у вас есть все ссылки, просто получите индекс последней косой черты, и у вас будет ваш номер.Регулярное выражение не требуется.