Как в PHP находить ссылки без регулярных выражений

Как в PHP находить ссылки без регулярных выражений

От автора: не люблю каждый раз натыкаться на одни и те же грабли! Вот сегодня опять та тема, в которой никак не обойтись без регулярных выражений. Это и есть мои любимые «грабли». Но все равно я не сдамся, и чтобы с помощью PHP находить ссылки, я обойдусь без них!

Никуда без них не деться!

Нет уж, господа консерваторы! Я постараюсь уж как-нибудь реализовать парсинг документов без этого застарелого средства. Ну не хватает у меня терпения на составление шаблонов с помощью регулярных выражений. А когда терпение лопается, то рождаются другие более «ругательные» выражения :) . Так что «грабли» в сторону – мы идем по собственному галсу!

Чтобы не опростоволоситься, нам потребуется сторонняя библиотека — Simple HTML DOM. Скачать ее можно по этой ссылке. Не беспокойтесь, версия хоть и старая, но работает. А главное, что это средство посвежее будет, чем выражения регулярные :) .

Как в PHP находить ссылки без регулярных выражений

После распаковки помещаем файл simple_html_dom.php в папку со скриптом, чтоб легче было подключать. Все остальные файлы в принципе нас не интересуют, но пригодятся вам в будущем. Там есть и мануал, и примеры использования библиотеки.

Как в PHP находить ссылки без регулярных выражений

Реализуем!

Напомню, что сегодня мы научимся, как найти ссылки PHP без «ужасных» регулярных выражений. Теперь нам осталось подключить скрипт библиотеки у себя в коде и просканировать указанную веб-страницу на наличие гиперссылок.

<?php
include 'simple_html_dom.php';
$razmetka = file_get_html('http://test2.ru/');
foreach($razmetka->find('a') as $teg)
       echo $teg->href . "<br>";
?>

Как в PHP находить ссылки без регулярных выражений

Для доказательства действенности этого метода приведу код разметки «отпарсеной» страницы.

Как в PHP находить ссылки без регулярных выражений

Сразу оговорюсь, что я не сканировал ничей сайт. Для демонстрации примера я использовал Денвер, а в нем стоит программная заглушка, которая не позволяет парсить удаленные хосты.

Еще пример!

Вот еще один вариант реализации, в котором нам также удастся обойтись без «граблей».

<?php
$razmetka_html = file_get_contents('sample.html');
$dom = new DOMDocument;
$dom->loadHTML($razmetka_html);
$tegi = $dom->getElementsByTagName("a");
foreach ($tegi as $teg) {
    echo $teg->nodeValue." ";
    echo $teg->getAttribute('href')."<br>";
    echo "<br>";
}
?>

Как в PHP находить ссылки без регулярных выражений

Разметка страницы, в которой с помощью PHP находили ссылки в тексте.

<html>
 <head>
  <title>Sample</title>
 </head>
 <body>
   <div class="menu">
    <h2>Menu</h2>
    <ul>
     <li><a href="1.php">Linc 1</a></li>
     <li><a href="2.php">Linc 2</a></li>
     <li><a href="3.php">Linc 3</a></li>
     <li><a href="4.php">Linc 4</a></li>
     <li><a href="5.php">Linc 5</a></li>
    </ul>
   </div>
   <div class="cont">
    <p>PHP is a server scripting language</p>
  </div>
 </body>
</html>

Как в PHP находить ссылки без регулярных выражений

Мне очередной раз удалось избавиться от своих «граблей» :) . А вам?

Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Курс по программированию на языке PHP

Изучите PHP с нуля до результата!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree