Preg_match_all <a href - PullRequest
       35

Preg_match_all <a href

2 голосов
/ 05 октября 2009

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

Ответы [ 6 ]

9 голосов
/ 05 октября 2009

Простой PHP HTML Dom 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 />';
}
4 голосов
/ 05 октября 2009

Не используйте регулярные выражения для обработки 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";
}
1 голос
/ 30 октября 2013

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

<?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, потому что вы не всегда будете знать, был ли документ / веб-сайт правильно сформирован.

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

1 голос
/ 05 октября 2009

При "разборе" html я в основном полагаюсь на PHPQuery: http://code.google.com/p/phpquery/, а не regex.

0 голосов
/ 05 октября 2009

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

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

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

0 голосов
/ 05 октября 2009

Очистка ссылок из HTML может быть выполнена с использованием HTML-парсера.

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

...