Найти все ссылки в string

194
28 ноября 2021, 08:10

Имеется строка с HTML кодом, как получить все ссылки внутри этого string? В голову ничего не приходит. Это через регулярку делается?

Answer 1

Вариант с DOMDocument:

$htmlDom = new DOMDocument;
$htmlDom->loadHTML($html_string);
$links = $htmlDom->getElementsByTagName('a');
$urls = array();
foreach($links as $link){
    $linkText = $link->nodeValue;
    $linkHref = $link->getAttribute('href');
    if(strlen(trim($linkHref)) == 0){
        continue;
    }
    if($linkHref[0] == '#'){
        continue;
    }
    $urls[] = array(
        'text' => $linkText,
        'href' => $linkHref
    ); 
}
var_dump($urls);

вариант с preg_match_all:

$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $html_string, $urls)) {
    //$urls[2] = массив адресов
    //$urls[3] = массив адресов с тегом а
}
var_dump($urls);
Answer 2

Есть такая проверка на вхождение слова в строке:

if(stristr($string, 'https://stackoverflow.com') === FALSE) {
  echo '"earth" не найдена в строке';
}

Можешь регулярку написать и все найденное записать в массив:

preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
  "<b>пример: </b><div align=left>это тест</div>",
  $out, PREG_PATTERN_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";

Результат:

<b>пример: </b>, <div align=left>это тест</div>
пример: , это тест
READ ALSO
Как оптимизировать mySql запросы через PHP?

Как оптимизировать mySql запросы через PHP?

Идет огромный поток информации, и это уже сейчас занимает много времениНадо реализовать постепенную запись в БД

76
Вывод многомерного массива с ключами

Вывод многомерного массива с ключами

Есть многомерный массив aqua, который я вывожу через foreach

100
Как загружать большой прайс в mysql?

Как загружать большой прайс в mysql?

Суть задачи: загрузить прайс (около 1 милиона позиций) через веб интерфейсСейчас этот интерфейс есть и он работает, но заметил такое: первых...

85
Группировка подзапроса

Группировка подзапроса

Проблема с группировкой подзапроса, при выборе MIN выбирается минимальное значение вообще, не отрабатывает GROUP BY post_type, post_status

118