Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярные выражения 
:(
    Опции темы
study
Дата 13.1.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Народ подскажите регулярное выражение для такой строки: "Суммарный трафик: 550504", т.е. строка символов пробел число.
PM MAIL   Вверх
HalkaR
Дата 13.1.2005, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Код

/^(.+)\:( +)(\d+)$/

коли не глючу
PM MAIL   Вверх
Secandr
Дата 13.1.2005, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



Если нужны только цифры, то достаточно:
Код

/ (\d+)/



--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
study
Дата 13.1.2005, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



а как мне разбить вот такую вот строку:"10.41.89.10 \t 10.41.90.5 \t 2004.12.22 10:07 \t 60" из неё надо извлечь только последнее значение, число и время, т.е. 2004.12.22 10:07 и 60, \t - табуляция

Это сообщение отредактировал(а) study - 13.1.2005, 13:10
PM MAIL   Вверх
Secandr
Дата 13.1.2005, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



а чем тебе split не нравится.

Это сообщение отредактировал(а) Secandr - 13.1.2005, 13:23


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
study
Дата 13.1.2005, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



а что быстрее будет, split или регулярное выражение, файл большой, время - мало
PM MAIL   Вверх
HalkaR
Дата 13.1.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Собственно split и реализует регулярное выражение, просто в более удобной обертке. Но в твоем случае наверно лечше регулярка.
PM MAIL   Вверх
study
Дата 13.1.2005, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Подскажите плз регулярное выражение для вот этой сторчки, что-то у меня не получаеться
"10.41.89.10 \t 10.41.90.5 \t 2004.12.22 10:07 \t 60",
я делаю так
Код

if ($str =~ m/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})( +)(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})( +)(\d+)\.(\d+})\.(\d+)( +)(\d+)(\d+)( +)(\d+)/){
 print "$1#$2#$3#$4#$5#$6#$7#$8#$9#$10#$11#$12#$14\n";
}

может ошибся smile
Добавлено @ 14:55
мне нужно из файла выбрать строчки, у которых определённое время, например, 10:07
PM MAIL   Вверх
chaos
Дата 13.1.2005, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(study @ 13.1.2005, 14:53)
Подскажите плз регулярное выражение для вот этой сторчки, что-то у меня не получаеться
"10.41.89.10 \t 10.41.90.5 \t 2004.12.22 10:07 \t 60",
я делаю так
Код

if ($str =~ m/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})( +)(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})( +)(\d+)\.(\d+})\.(\d+)( +)(\d+)(\d+)( +)(\d+)/){
 print "$1#$2#$3#$4#$5#$6#$7#$8#$9#$10#$11#$12#$14\n";
}

может ошибся smile
Добавлено @ 14:55
мне нужно из файла выбрать строчки, у которых определённое время, например, 10:07

Для твоего примера
Код

while (<F>) {
 print "$_\n" if ($1 eq '10' && $2 eq '07') if (/.+(\d{2}\:\d{2}).+/)
}


PM WWW   Вверх
study
Дата 13.1.2005, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Привет chaos, а как мне получить значение 60 из этой строки (последнее значение) для определённой даты?
строка "10.41.89.10 \t 10.41.90.5 \t 2004.12.22 10:07 \t 60",
PM MAIL   Вверх
chaos
Дата 14.1.2005, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(study @ 13.1.2005, 15:27)
Привет chaos, а как мне получить значение 60 из этой строки (последнее значение) для определённой даты?
строка "10.41.89.10 \t 10.41.90.5 \t 2004.12.22 10:07 \t 60",

Если хочешь отбирать по дате и последнему числу то тебе подойдет следующее:
Код

while (<F>) {
 m/.+\t(\d{4}\.\d{2}\.\d{2})\s\d{2}:\d{2}\t(\d+)/;
 print "$_\n" if ($1 eq $date && $2 == $chislo);
}


PM WWW   Вверх
study
Дата 14.1.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



нет, chaos, мне надо по дате 2004.12.22 10:07, получить число 60, т.е. из строки в которой имееться соответствующая дата, точнее время, получить значение, последнего столбца.
Спасибо большое за помощь.
PM MAIL   Вверх
chaos
Дата 14.1.2005, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(study @ 14.1.2005, 10:01)
нет, chaos, мне надо по дате 2004.12.22 10:07, получить число 60, т.е. из строки в которой имееться соответствующая дата, точнее время, получить значение, последнего столбца.
Спасибо большое за помощь.

Тогда так:
Код

while (<F>) {
 m/.+\t(\d{4}\.\d{2}\.\d{2})\s(\d{2}:\d{2})\t(\d+)/;
 print "$3\n" if ($1 eq $date && $2 eq $time);
}


Это сообщение отредактировал(а) chaos - 14.1.2005, 11:06
PM WWW   Вверх
study
Дата 14.1.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Спасибо сейчас попробую.
PM MAIL   Вверх
dimes
Дата 14.1.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



Цитата(study @ 13.1.2005, 16:27)
10.41.89.10 \t 10.41.90.5 \t 2004.12.22 10:07 \t 60

Что это? smile
Если ты сможеш объяснить формат построение таких строк мы сможеш тебе правильно помочь

а пока... если cтрока не очень большая, дата и значение стоит в указанном порядке в конце строки, то возможно проще зделать так:
my ($_value,$_date)=revece split("\t",$str);
PM ICQ   Вверх
study
Дата 14.1.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 20.9.2004

Репутация: нет
Всего: нет



Формат строки такой, IP адрес, табуляция, ещё IP адрес, табуляция, дата, потом пробел, потом время, табуляция число(байты). Мне нужно из файла, по определённым значениям времени получить байты.
PM MAIL   Вверх
Secandr
Дата 14.1.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 1
Всего: 39



Код

if (/2004[.]12[.]22[ ]+10:07[\t]+(\d+)&/) {print $1;}


Это сообщение отредактировал(а) Secandr - 14.1.2005, 13:17


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.