У меня есть страницы, содержащие ссылки на другие страницы. Как извлечь весь 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 | фильм | доменное имя
Измените шаблон регулярного выражения на
$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 вместо регулярного выражения.