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

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

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Как выбрать URL'ы вида http://www.site.ru из списка
 
 автор: webarray   (03.07.2007 в 11:52)   письмо автору
 
 

Собственно такой вопрос:
Есть список Урл"ов
http://www.site1.ru/?id=345
http://site2.ru/?url=news
http://site5.ru
http://site3.ru/news/
http://site4.ru/

подскажите как при помощи регулярных выражений,
полуить из списка те урл'ы которые соответствуют виду:
http://имя сайта.ru/ или http://www.имя сайта.ru/

   
 
 автор: Nemezis   (03.07.2007 в 15:08)   письмо автору
 
   для: webarray   (03.07.2007 в 11:52)
 


^(http://[www]?.+\.ru)$

Можно использовать таке регулярное выражение, должно работать.

   
 
 автор: kasmanaft   (03.07.2007 в 15:08)   письмо автору
 
   для: webarray   (03.07.2007 в 11:52)
 


preg_match_all("#http://([a-z0-9][-a-z0-9]*[a-z0-9]\.)+ru/\s#i", $text, $regs);

Nemezis, нет ... такое правильно работать не будет...

   
 
 автор: webarray   (06.07.2007 в 09:38)   письмо автору
 
   для: kasmanaft   (03.07.2007 в 15:08)
 

Почему то не работает..
Проверял вот так:

<?
$url 
"http://www.mysite.ru/"
preg_match_all("#http://([a-z0-9][-a-z0-9]*[a-z0-9]\.)+ru/\s#i"$url$regs); 
print_r($regs);
?>

   
 
 автор: Faraon   (06.07.2007 в 10:07)   письмо автору
 
   для: webarray   (06.07.2007 в 09:38)
 


$url = "http://www.mysite.ru";
 preg_match_all("#http://[www]{3}.[a-z0-9]*+\.ru$#", $url, $regs);
print_r($regs);

   
 
 автор: webarray   (06.07.2007 в 11:18)   письмо автору
 
   для: Faraon   (06.07.2007 в 10:07)
 

А если ссылка будет такого вида
http://site1.narod.ru то как тогда?

   
 
 автор: Faraon   (06.07.2007 в 15:10)   письмо автору
 
   для: webarray   (06.07.2007 в 11:18)
 


$url = "http://www.test.mysite.ru";
 preg_match_all("#^(http://[w]*\.*.*\.ru)$#", $url, $regs);
print_r($regs);

   
 
 автор: kasmanaft   (06.07.2007 в 13:31)   письмо автору
 
   для: webarray   (06.07.2007 в 09:38)
 

> Почему то не работает
После урла должен стоять пробел... А о конце строки я что-то не подумал :)
Замените "\s" на "(\s|$)"
Результат в $regs[0]

   
 
 автор: webarray   (06.07.2007 в 13:41)   письмо автору
 
   для: kasmanaft   (06.07.2007 в 13:31)
 

Не тут проблема другая..
если урл - это домен 3 уровня, т.е через точку. http://site.narod.ru/..
и еще проблема:
http://site1.ru/?url=http://site2.ru/ - такую строчку тоже определяет правильно по маске http://******.ru

то как это все учесть в одном рег выражении?

   
 
 автор: kasmanaft   (06.07.2007 в 14:22)   письмо автору
 
   для: webarray   (06.07.2007 в 13:41)
 

> если урл - это домен 3 уровня, т.е через точку. http://site.narod.ru
С этим проблем не должно быть

> http://site1.ru/?url=http://site2.ru/ - такую строчку тоже определяет правильно
Да.. отсюда http://site2.ru/ выберет.. добавте (\s|^) в начало рег выражения, если такой урл надо пропустить.

   
 
 автор: Nemezis   (06.07.2007 в 16:54)   письмо автору
 
   для: webarray   (06.07.2007 в 13:41)
 

То выражение, которое я написал вначале, должно вам подойти:

<?
$url 
"http://site1.site0.ru";
 
preg_match_all("#^http://([www]?.+\.ru)$#i"$url$regs);
echo 
$regs['1']['0']; 
?>

http://site1.ru/?url=http://site2.ru/ - не пропустит.
http://site1.site.ru - пропустит.
http://www.site1.site.ru - пропустит.
http://www.site.ru - пропустит.
Так ведь надо ?

   
Rambler's Top100
вверх

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