Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с регекспом  (Прочитано 37333 раз)
0 Пользователей и 1 Гость смотрят эту тему.
samlab
Гость
« : 25-08-2010 09:20 » 

Парсером выдираю вот такой лист с проксями
Код:
141.76.45.18:3128 Anonymous Germany
141.76.45.17:3127 Anonymous Germany
192.41.135.218:3127 Anonymous Switzerland
198.7.242.43:3124 Anonymous United States
129.105.15.37:3124 Anonymous United States
138.246.99.250:3128 Anonymous Germany
198.7.242.41:3127 Anonymous United States
128.151.65.101:3128 Anonymous United States
128.112.139.18:3124 Anonymous United States
141.24.249.129:3128 Anonymous Germany
216.48.80.12:3128 Anonymous Canada
141.24.249.130:3128 Anonymous Germany
141.24.33.192:3128 Anonymous Germany
193.147.162.166:3124 Anonymous Spain
141.24.33.192:3127 Anonymous Germany
221.130.17.153:80 Anonymous China
221.130.17.66:80 Anonymous China
221.130.17.92:80 Anonymous China
221.130.17.93:80 Anonymous China
221.130.17.106:80 Anonymous China
221.130.17.107:80 Anonymous China
221.130.17.114:80 Anonymous China
221.130.17.144:80 Anonymous China
221.130.17.145:80 Anonymous China
221.130.17.251:80 Anonymous China
221.130.17.253:80 Anonymous China
221.130.17.48:80 Anonymous China
221.130.17.62:80 Anonymous China
221.130.17.75:80 Anonymous China
221.130.17.84:80 Anonymous China
221.130.17.91:80 Anonymous China
221.130.7.70:80 Anonymous China
221.130.7.72:80 Anonymous China
131.175.17.10:3128 Anonymous Italy
221.130.17.116:80 Anonymous China
221.130.17.141:80 Anonymous China
221.130.17.142:80 Anonymous China
221.130.17.143:80 Anonymous China
221.130.17.36:80 Anonymous China
221.130.17.38:80 Anonymous China
221.130.17.73:80 Anonymous China
221.130.17.76:80 Anonymous China
221.130.17.90:80 Anonymous China
221.130.17.97:80 Anonymous China
..........
Прошу помочь с регулярным выражением, чтобы прокси сервера отделить от прочего шлака...
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 25-08-2010 09:54 » 

http://www.txt2re.com/index.php3 - онлайновый генератор регулярных выражений.
Записан
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #2 : 25-08-2010 09:58 » 

Код:
#!/usr/bin/perl -w

use strict;

my $tmp="141.76.45.18:3128 Anonymous Germany";

$tmp =~ m/(\d+)(\.\d+){3}/;

print "$&\n";

для вывода  еще и порта:

Код:
$tmp =~ m/(\d+)(\.\d+){3}(\:\d+){1}/;
« Последнее редактирование: 25-08-2010 10:03 от McZim » Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
samlab
Гость
« Ответ #3 : 25-08-2010 12:20 » 

Спасибо... А как сделать так, чтобы выводились все прокси, а не первый в списке?
Код:
#!/usr/bin/perl -W

my $test = <<EOF;
141.76.45.18:3128 Anonymous Germany
141.76.45.17:3127 Anonymous Germany
192.41.135.218:3127 Anonymous Switzerland
198.7.242.43:3124 Anonymous United States
129.105.15.37:3124 Anonymous United States
138.246.99.250:3128 Anonymous Germany
198.7.242.41:3127 Anonymous United States
128.151.65.101:3128 Anonymous United States
128.112.139.18:3124 Anonymous United States
141.24.249.129:3128 Anonymous Germany
216.48.80.12:3128 Anonymous Canada
141.24.249.130:3128 Anonymous Germany
141.24.33.192:3128 Anonymous Germany
193.147.162.166:3124 Anonymous Spain
141.24.33.192:3127 Anonymous Germany
221.130.17.153:80 Anonymous China
221.130.17.66:80 Anonymous China
221.130.17.92:80 Anonymous China
221.130.17.93:80 Anonymous China
221.130.17.106:80 Anonymous China
221.130.17.107:80 Anonymous China
221.130.17.114:80 Anonymous China
221.130.17.144:80 Anonymous China
221.130.17.145:80 Anonymous China
221.130.17.251:80 Anonymous China
221.130.17.253:80 Anonymous China
221.130.17.48:80 Anonymous China
221.130.17.62:80 Anonymous China
221.130.17.75:80 Anonymous China
221.130.17.84:80 Anonymous China
221.130.17.91:80 Anonymous China
221.130.7.70:80 Anonymous China
221.130.7.72:80 Anonymous China
131.175.17.10:3128 Anonymous Italy
221.130.17.116:80 Anonymous China
221.130.17.141:80 Anonymous China
221.130.17.142:80 Anonymous China
221.130.17.143:80 Anonymous China
221.130.17.36:80 Anonymous China
221.130.17.38:80 Anonymous China
221.130.17.73:80 Anonymous China
221.130.17.76:80 Anonymous China
221.130.17.90:80 Anonymous China
221.130.17.97:80 Anonymous China
EOF

my @proxy = $test =~ m/(\d+)(\.\d+){3}(\:\d+){1}/;

for my $proxy (@proxy)
{
    print "$proxy\n"
}

Не робит, что то Здесь была моя ладья...
« Последнее редактирование: 25-08-2010 12:41 от samlab » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 25-08-2010 13:16 » 

samlab, а документацию почитать слабо? Наводка: модификатор "g" операции "m//".

Кстати, "{1}" лишнее. Также не надо ставить бекслешь перед двоеточием.
« Последнее редактирование: 25-08-2010 13:18 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #5 : 26-08-2010 04:23 » 

RXL, да ты прав, думаю автор допилит Улыбаюсь



(1153: исправил нехорошую очепятку)
« Последнее редактирование: 26-08-2010 13:55 от Алексей1153++ » Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
samlab
Гость
« Ответ #6 : 26-08-2010 13:31 » 

Спасибо за подсказку, но автор немного не допилил, а именно, выводится ответ не совсем в той форме... Меня одолевают смутные сомнения
Код:
#!/usr/bin/perl -W

my $test = <<EOF;
141.76.45.18:3128 Anonymous Germany
141.76.45.17:3127 Anonymous Germany
192.41.135.218:3127 Anonymous Switzerland
198.7.242.43:3124 Anonymous United States
129.105.15.37:3124 Anonymous United States
138.246.99.250:3128 Anonymous Germany
198.7.242.41:3127 Anonymous United States
128.151.65.101:3128 Anonymous United States
128.112.139.18:3124 Anonymous United States
141.24.249.129:3128 Anonymous Germany
216.48.80.12:3128 Anonymous Canada
141.24.249.130:3128 Anonymous Germany
141.24.33.192:3128 Anonymous Germany
193.147.162.166:3124 Anonymous Spain
141.24.33.192:3127 Anonymous Germany
221.130.17.153:80 Anonymous China
221.130.17.66:80 Anonymous China
221.130.17.92:80 Anonymous China
221.130.17.93:80 Anonymous China
221.130.17.106:80 Anonymous China
221.130.17.107:80 Anonymous China
221.130.17.114:80 Anonymous China
221.130.17.144:80 Anonymous China
221.130.17.145:80 Anonymous China
221.130.17.251:80 Anonymous China
221.130.17.253:80 Anonymous China
221.130.17.48:80 Anonymous China
221.130.17.62:80 Anonymous China
221.130.17.75:80 Anonymous China
221.130.17.84:80 Anonymous China
221.130.17.91:80 Anonymous China
221.130.7.70:80 Anonymous China
221.130.7.72:80 Anonymous China
131.175.17.10:3128 Anonymous Italy
221.130.17.116:80 Anonymous China
221.130.17.141:80 Anonymous China
221.130.17.142:80 Anonymous China
221.130.17.143:80 Anonymous China
221.130.17.36:80 Anonymous China
221.130.17.38:80 Anonymous China
221.130.17.73:80 Anonymous China
221.130.17.76:80 Anonymous China
221.130.17.90:80 Anonymous China
221.130.17.97:80 Anonymous China
EOF

@proxies = $test =~ m/(\d+)(\.\d+){3}(:\d+)/g;

print "@proxies";
Ответ выводится таким образом
Код:
141 .18 :3128 141 .17 :3127 192 .218 :3127 198 .43 :3124 129 .37 :3124 138 .250
:3128 198 .41 :3127 128 .101 :3128 128 .18 :3124 141 .129 :3128 216 .12 :3128 14
1 .130 :3128 141 .192 :3128 193 .166 :3124 141 .192 :3127 221 .153 :80 221 .66 :
80 221 .92 :80 221 .93 :80 221 .106 :80 221 .107 :80 221 .114 :80 221 .144 :80 2
21 .145 :80 221 .251 :80 221 .253 :80 221 .48 :80 221 .62 :80 221 .75 :80 221 .8
4 :80 221 .91 :80 221 .70 :80 221 .72 :80 131 .10 :3128 221 .116 :80 221 .141 :8
0 221 .142 :80 221 .143 :80 221 .36 :80 221 .38 :80 221 .73 :80 221 .76 :80 221
.90 :80 221 .97 :80
А хочется нормального, читабельного вида, т.е.
Код:
141.76.45.18:3128
141.76.45.18:3128
141.76.45.18:3128
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 26-08-2010 13:53 » 

samlab, разбери эту строку
$tmp =~ m/(\d+)(\.\d+){3}/;
 и расскажи как происходит поиск нужных тебе тетрад
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 26-08-2010 18:04 » 

Код:
my @proxies =
    map {
        m/^(.*):(\d+)$/;
        $_ = { 'ip' => $1, 'port' => $2 };
    } $test =~ m/(\d+(?:\.\d+){3}:\d+)/g;

for my $proxy (@proxies)
{
    print
        'IP=', $proxy->{'ip'},
        ', Port=', $proxy->{'port'},
        "\n";
}
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #9 : 26-08-2010 19:41 » 

Спасибо, что тратите своё время на таких неучей, вроде меня. Скрипт чуть изменил - все нормально работает.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines