| Раздел: PHP, MySQL, веб-программирование | Автор: foxweb |
| E-mail: |
Www: http://foxweb.net.ru |
| Просмотров: 1817 | Дата: 13.02.2007 |
Иногда бывает нужно загрузить HTML-страницу и извлечь из неё все ссылки из тэгов <a href=...> Для этого воспользуемся функцией preg_match_all($rgexp, $str, $matches); которая извлекает из строки $str все подстроки, удовлетворяющие заданному регулярному выражению $regexp и помещает все найденные варианты в массив $mathces.
<html>
<head>
<title>Извлечённые URL</title>
</head>
<body>
<?php
$str = file_get_contents("http://foxweb.net.ru/");
preg_match_all("!<a[^>]*\shref=[\"']?([^>\"'#\s]+)[\"']?[^>]*>!is",$str,$matches);
echo "<pre>";
foreach($matches[1] as $line)
echo "$line\n";
echo "</pre>";
?>
</body>
</html>
Главное здесь — правильно составить регулярное выражение, которому будут соответствовать только правильные URL-адреса. Не будем особо вдаваться в подробности работы регулярных выражений, им посвящены целые книги. Хотя если вы раньше составляли регулярные выражения в скриптах на Perl, можно напрямую перенести их в функцию preg_match_all, потому что она понимает перл-выражения.
Итак, приведённый выше скрипт считывает в переменную $str целевой HTML-файл (это может быть URL-адрес документа или путь файла на диске). Потом отработает функция поиска и на выходе мы получим массив $macthes удовлетворяющих выражению подстрок. С помощью конструкции foreach выведем все найденные URL на экран. Обратите внимание, что массив найденных подстрок будет находиться в массиве $mathes[1]. Подробности смотрите в документации к функции preg_match_all().