регулярное выражение php для получения определенного URL

#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