Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Получение массива ссылок нас странице

Сообщения:  [1-6] 

 
 автор: locker   (14.12.2006 в 16:49)   письмо автору
 
   для: kasmanaft   (14.12.2006 в 15:49)
 

Хе-хе. Именно то, что нужно :)

   
 
 автор: kasmanaft   (14.12.2006 в 15:49)   письмо автору
 
   для: locker   (14.12.2006 в 14:44)
 

Немного не понял ... Ссылки на другие сайты нужно отбросить или именно они и нужны?


<?
$text 
file_get_contents('http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=29323&page=1');
// только внешние
preg_match_all("#<a.*?href=['\"]?(?!http://www.softtime.ru)(http://[^'\"\s>]+)['\"]?[^>]*?>#is"$text$regs);
// только www.softtime.ru
preg_match_all("#<a.*?href=['\"]?((http://www.softtime.ru/|(?!http://))[^'\"\s>]+)['\"]?[^>]*?>#is"$text$regs2);
echo 
"<pre>";
print_r($regs[1]);
print_r($regs2[1]);
?>

   
 
 автор: locker   (14.12.2006 в 14:44)   письмо автору
 
   для: kasmanaft   (14.12.2006 в 14:36)
 

Да, но так или иначе потом нужно пройтись по массиву полученных значений, а нельзя сразу - в процессе парсинга выделить внешние ссылки - т.е. добавить например условие что они не дожны начинаться с www.site.ru например?

   
 
 автор: kasmanaft   (14.12.2006 в 14:36)   письмо автору
 
   для: locker   (14.12.2006 в 13:06)
 

Можно использовать такое рег. выражение:
"#<a.*?href=['\"]?([^'\"\s>]+)['\"]?[^>]*?>#is"

Оно обрабатывает ссылки и "с" и "без" кавычек

>> внешняя она или нет т.е стоит не на этот сайт, а на другой
Если ссылка начинается на " http:// ", то нужно проверить host, полученный в результате обработки строки ф-ей parse_url ... А если ссыка не начинается на хттп://, то ее можно не проверять

   
 
 автор: cheops   (14.12.2006 в 14:22)   письмо автору
 
   для: locker   (14.12.2006 в 13:06)
 

Лучше использовать регулярное выражение, которое захватывает все ссылки
preg_match_all('|<a.*href=([^>]+)>(.*?)</a>|Uis', $url, $links);

А лишние кавычки и пробелы потом удалять уже после в цикле постобработки.

   
 
 автор: locker   (14.12.2006 в 13:06)   письмо автору
 
 

Хотел бы узнать - как лучше взять все ссылки со страницы? У меня 2 правила:
1. preg_match_all('~<a.*?href=(\'|"|)([^\s]+)\\1[^>]*?>(.*?)</a>~is', $str, $out);
2. preg_match_all('|<a.*href="(.*)".*>(.*)</a>|Uis', $url, $links);

Недостатки второго примера - не ищет ссылки типа "<a href=link" или "<a href='link", недостаток первого примера - писал не я, поэтому не работает иногда и я не могу разобраться, почему. Хотелось бы узнать как можно получить все ссылки со страницы, независимо от того как она поставлена (кавычки, двойные кавычки, без кавычек) и круто было бы узнать, внешняя она или нет (т.е стоит не на этот сайт, а на другой (писали что можно так сделать)). Спасибо.

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования