#php #regex #url
#php #регулярное выражение #url
Вопрос:
Я хотел бы получить URL-адреса с веб-страницы, которая начинается с «.. / category /», из этих тегов ниже:
<a href="../category/product/pc.html" target="_blank">PC</a><br>
<a href="../category/product/carpet.html" target="_blank">Carpet</a><br>
Любое предложение было бы очень оценено.
Спасибо!
Ответ №1:
Никаких регулярных выражений не требуется. Достаточно простого запроса XPath с помощью DOM:
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//a[starts-with(@href, "../category/")]');
foreach ($nodes as $node) {
echo $node->nodeValue.' = '.$node->getAttribute('href').PHP_EOL;
}
Выведет:
PC = ../category/product/pc.html
Carpet = ../category/product/carpet.html
Комментарии:
1. Извините, что спрашиваю, но я не использовал это раньше, и я хотел бы получить содержимое по ссылке. Что-то вроде » example.com/p/carpet.html «. Как я добавлю это в код?
2. @user704278: Если вы хотите переписать URL, просто сделайте:
$new_href = 'example.com/p/'.basename($node->getAttribute('href'));
Ответ №2:
Это регулярное выражение выполняет поиск вашей ../category/
строки:
preg_match_all('#......="(../category/.*?)"#', $test, $matches);
Для сопоставления используются все текстовые литералы. Вы можете заменить ….. чтобы сделать его более конкретным. Только .
требуется экранирование. .*?
Ищет строку переменной длины. И ()
фиксирует совпадающее имя пути, поэтому оно отображается в $matches. В руководстве объясняется остальной синтаксис. http://www.php.net/manual/en/book.pcre.php