Як в PHP знаходити посилання без регулярних виразів

29

Від автора: не люблю кожен раз натикатися на одні і ті ж граблі! Ось сьогодні знову та тема, в якій ніяк не обійтися без регулярних виразів. Це і є мої улюблені «граблі». Але все одно я не здамся, і щоб з допомогою PHP знаходити посилання, я обійдуся без них!

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

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

Щоб не схибити, нам знадобиться стороння бібліотека — Simple HTML DOM. Скачати її можна за цим посиланням. Не турбуйтеся, версія хоч і стара, але працює. А головне, що це засіб свіжіші, ніж регулярні вирази :) .

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

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

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

Реалізуємо!

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

find(‘a’) as $teg)
echo $teg->href . «
«;
?>

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

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

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

Відразу обмовлюся, що я не сканував нічий сайт. Для демонстрації прикладу я використовував Денвер, а в ньому варто програмна заглушка, яка не дозволяє парсити віддалені хости.

Ще приклад!

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

loadHTML($razmetka_html);
$tegi = $dom->getElementsByTagName(«a»);
foreach ($tegi as $teg) {
echo $teg->nodeValue.» «;
echo $teg->getAttribute(‘href’).»
«;
echo «
«;
}
?>

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

Розмітка сторінки, в якій за допомогою PHP знаходили посилання в тексті.

Sample

Menu

  • Linc 1
  • Linc 2
  • Linc 3
  • Linc 4
  • Linc 5

PHP is a server scripting language

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

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