Разбирайте все ссылки, которые содержат определенное слово в теге "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>";
}

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

Ответ 1

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

<?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>";
    }
}
?>

Ответ 2

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

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

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

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

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

Полный пример (демонстрация):

$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;
}

Также см.

для связанных вопросов.

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

Ответ 3

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

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

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

Ответ 4

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

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