@P747

Паттерн для выборки ссылок сортировкой по заданному домену/анкору?

Добрый день, допустим есть ссылки в теле html:

<a href="https://yandex.ru/link1">Яндекс Link1</a>
<a href="https://yandex.ru/link2">Link2 Яндекс</a>

<a href="https://google.com/link1">Google Link1</a>
<a href="https://google.com/link2">Link2 Google</a>


Как с помощью preg_match_all получить ссылки:

1. Только для домена google.com, тоесть "https://google.com/link1" и "https://google.com/link2"
2. Ссылки, где есть в анкоре регистронезависимое слово "Link1", тоесть "https://yandex.ru/link1" и "https://google.com/link1"
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 2
abyrvalg
@abyrvalg
Вы точно хотите парсить html регэкспами? Одумайтесь, ведь может прийти Он.

Как-то так, может?

$doc = new DOMDocument();
$doc->loadHTML($htmlAsString);
$links = $doc->getElementsByTagName('a');

function filterByHref(DOMNodeList $anchors, string $hrefRegex): array {
    $links = [];
    /** @var DOMElement $elm */
    foreach ($anchors as $elm) {
        if (! $elm->hasAttribute('href')) {
            continue;
        }
        $link = $elm->getAttribute('href');
        if (preg_match($hrefRegex, $link)) {
            $links[] = $link;
        }
    }

    return $links;
}

var_export([
    'cnt' => $links->length,
    'goo' => filterByHref($links, '|^https://google.com\b|'),
    'link' => filterByHref($links, '|link1|i'),
], false);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
LAPTOP.RU Кострома
от 25 000 до 65 000 ₽
LAPTOP.RU Москва
от 130 000 до 170 000 ₽
от 80 000 до 120 000 ₽
01 мар. 2021, в 17:17
800 руб./в час
01 мар. 2021, в 17:05
25000 руб./за проект
01 мар. 2021, в 16:46
150000 руб./за проект