Разбирайте все ссылки, которые содержат определенное слово в теге «href»

Возможный дубликат:
Схват атрибута href элемента A

Мне нужно разобрать все ссылки HTML-документа, содержащие какое-то слово (это всегда разные).

Пример:

<a href="/bla:bla">BLA</a> <a href="/link:link">BLA</a> <a href="/link:bla">BLA</a> 

Мне нужны только ссылки с «href = / link: ….», что лучший способ пойти на это?

 $html = "SOME HTLM "; $dom = new DomDocument(); @$dom->loadHTML($html); $urls = $dom->getElementsByTagName('a'); foreach ($urls as $url) { echo "<br> {$url->getAttribute('href')} , {$url->getAttribute('title')}"; echo "<hr><br>"; } 

В этом примере показаны все ссылки, мне нужны конкретные ссылки.

Используя условие.

 <?php $lookfor='/link:'; foreach ($urls as $url){ if(substr($url->getAttribute('href'),0,strlen($lookfor))==$lookfor){ echo "<br> ".$url->getAttribute('href')." , ".$url->getAttribute('title'); echo "<hr><br>"; } } ?> 

Вместо того, чтобы сначала извлекать все элементы a, а затем отфильтровывать те, которые вам нужны, вы можете напрямую запросить свой документ для этих узлов с помощью XPath :

 //a[contains(@href, "link:")] 

Этот запрос найдет все элементы в документе, которые содержат строку : в атрибуте href .

Чтобы проверить, начинается ли атрибут href со ссылкой: вы можете сделать

 //a[starts-with(@href, "link:")] 

Полный пример ( demo ):

 $dom = new DomDocument(); $dom->loadHTML($html); $xpath = new DOMXPath($dom); foreach ($xpath->query('//a[contains(@href, "link:")]') as $a) { echo $a->getAttribute('href'), PHP_EOL; } 

Также см.

  • Реализация условия в XPath
  • исключая URL-адреса из ссылок на пути?
  • PHP / XPath: найти текстовый узел, который «начинается с» конкретной строки?
  • PHP Xpath: получить все значения href, содержащие иглу

по смежным вопросам.

Примечание: обозначение этого CW из-за многих связанных вопросов

Используйте регулярные выражения.

 foreach ($urls as $url) { $href = $url->getAttribute('href'); if (preg_match("/^\/link:/",$href){ $links[$url->getAttribute('title')] = $href; } } 

$ links содержит все заголовки и href, которые соответствуют.

Поскольку getAttribute просто возвращает строку, вам нужно только проверить, с чего она начинается, с strpos ().

 $href = $url -> getAttrubute ('href'); if (strpos ($href, '/link:') === 0) { // Do your processing here }