Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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