Извлечение SEO URL с использованием pre_mattch_all

0

У меня есть страницы, содержащие ссылки на другие страницы. Как извлечь весь href, который начинается с определенного имени

как моя страница как тег

<a href="shows/film/lop-film/">Some Text</a>
<a href="movie/current/lop-film/">Some Text</a>
<a href="rot.company.com/sow/test/page/asd.mov"></a>


$search = '/<a\s+(?:[^"\'>]+|"[^"]*"|\'[^\']*\')*href=("[^"]+"|\'[^\']+\'|[^<>\s]+)/i'
preg_match_all($search, $Content, $matches);
foreach ($matches[1] as $value) {
     print_r('Links :'.$value);
}

Он извлекает, но возвращает нежелательные URL-адреса, связанные с внешними веб-сайтами и электронными письмами

 http://www.amazon.co.uk/
 mailto:[email protected]

Я в основном хочу отфильтровать матч, который начинается с show | фильм | доменное имя

Теги:
preg-match-all

1 ответ

1
Лучший ответ

Измените шаблон регулярного выражения на

$search = '/<a\s+(?:[^"\'>]+|"[^"]*"|\'[^\']*\')*href=("(show|movie|domain\.name)[^"]+"|\'(show|movie|domain\.name)[^\']+\'|(show|movie|domain\.name)[^<>\s]+)/i';

Дублирование (show|movie|domain\.name) выглядит уродливым, но поскольку вам нужно иметь дело с атрибутом href с одинарной или двойной цитатой, я не нашел лучшего способа. В общем, ни " или ' должны быть частью URL-адреса, но кто знает..

Но для работы с HTML Dom обычно лучше использовать PHP DOMDocument вместо регулярного выражения.

  • 0
    Спасибо за ответ. оно работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню