Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > регулярные выражения


Автор: study 13.1.2005, 12:03
Народ подскажите регулярное выражение для такой строки: "Суммарный трафик: 550504", т.е. строка символов пробел число.

Автор: HalkaR 13.1.2005, 12:34
Код

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

коли не глючу

Автор: Secandr 13.1.2005, 12:59
Если нужны только цифры, то достаточно:
Код

/ (\d+)/

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

Автор: Secandr 13.1.2005, 13:21
а чем тебе split не нравится.

Автор: study 13.1.2005, 13:26
а что быстрее будет, split или регулярное выражение, файл большой, время - мало

Автор: HalkaR 13.1.2005, 14:46
Собственно split и реализует регулярное выражение, просто в более удобной обертке. Но в твоем случае наверно лечше регулярка.

Автор: 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

Автор: chaos 13.1.2005, 15:19
Цитата(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}).+/)
}


Автор: 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",

Автор: chaos 14.1.2005, 08:26
Цитата(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);
}


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

Автор: chaos 14.1.2005, 11:04
Цитата(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);
}

Автор: study 14.1.2005, 11:27
Спасибо сейчас попробую.

Автор: dimes 14.1.2005, 12:05
Цитата(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);

Автор: study 14.1.2005, 12:38
Формат строки такой, IP адрес, табуляция, ещё IP адрес, табуляция, дата, потом пробел, потом время, табуляция число(байты). Мне нужно из файла, по определённым значениям времени получить байты.

Автор: Secandr 14.1.2005, 13:16
Код

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)