The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"И снова regex...."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"И снова regex...."  
Сообщение от Arpo email(ok) on 21-Янв-08, 13:15 
Народ хелло,

Лукинг фор хелп.

Не могу написать регулярное выражение для поиска в фаиле строк содержащих выражение вида: *126*093444444*200#. Тоесть "Звездочка(*), число 126, Звездочка(*), Девятизначное число, Звездочка, Число от одного до 5 символов( 0 - 20000), и Решотка(#).

Я в регулярных выражениях не очень, написал нечто вроде этого: if ( $line =~ m/(\*126\*\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\*\d{0,20000}\#)/ )

Но сам вижу что это не то.

Жду ответов...

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "И снова regex...."  
Сообщение от phpcoder email(??) on 21-Янв-08, 13:32 
[c0der@rock ~]$ perl -we 'if("*126*093444444*200#"=~m/\*126\*\d{9}\*\d{1,5}#/){print "ok\n"}'
ok

P.S. Хорошо вопрос поставлен, точнее описание регулярного выражения.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "И снова regex...."  
Сообщение от andy (??) on 21-Янв-08, 13:32 
>Не могу написать регулярное выражение для поиска в фаиле строк содержащих выражение
>вида: *126*093444444*200#. Тоесть "Звездочка(*), число 126, Звездочка(*), Девятизначное число, Звездочка, Число
>от одного до 5 символов( 0 - 20000), и Решотка(#).
>
>Я в регулярных выражениях не очень, написал нечто вроде этого: if (
>$line =~ m/(\*126\*\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\d{0,9}\*\d{0,20000}\#)/ )
>
>Но сам вижу что это не то.
>
>Жду ответов...

\d{минимальное_количество_числовых_знаков,максимальное_количество_числовых_знаков}
либо
\d{точное_количество_числовых_знаков}

if( $line =~ /\*126\*\d{9}\*(\d{5})\#/ && $1 <= 20000 ) { ... }

нечто типа такого

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "И снова regex...."  
Сообщение от angra (ok) on 21-Янв-08, 13:35 
квантифаер {min,max} не указывает границы чисел, он указывает число повторений, то есть \d{0,9} означает что стретится от нуля до 9 цифр, \d{0,20000} - от 0 до 20000 цифр.
ваш регекс
\*126\*\d{9,9}\*\d{1,5}#
Однако он не проверяет что последнее число будет меньше 20000, эту проверку надо делать отдельно, регексы не для того предназначены. Например так
if ( $line =~/\*126\*\d{9,9}\*(\d{1,5})#/ and $1<=20000)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "И снова regex...."  
Сообщение от anonymous (??) on 21-Янв-08, 13:39 
>\*126\*\d{9,9}\*\d{1,5}#

Вместо \d{9,9} можно просто \d{9}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "И снова regex...."  
Сообщение от Arpo email(ok) on 21-Янв-08, 13:40 
>квантифаер {min,max} не указывает границы чисел, он указывает число повторений, то есть
>\d{0,9} означает что стретится от нуля до 9 цифр, \d{0,20000} -
>от 0 до 20000 цифр.
>ваш регекс
>\*126\*\d{9,9}\*\d{1,5}#
>Однако он не проверяет что последнее число будет меньше 20000, эту проверку
>надо делать отдельно, регексы не для того предназначены. Например так
>if ( $line =~/\*126\*\d{9,9}\*(\d{1,5})#/ and $1<=20000)

Спасиба всем, помогли очень.

2angra, спасибо отдельное, Вы меня уже не в первый раз выручаете...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "И снова regex...."  
Сообщение от Arpo email(ok) on 21-Янв-08, 14:10 
>[оверквотинг удален]
>>от 0 до 20000 цифр.
>>ваш регекс
>>\*126\*\d{9,9}\*\d{1,5}#
>>Однако он не проверяет что последнее число будет меньше 20000, эту проверку
>>надо делать отдельно, регексы не для того предназначены. Например так
>>if ( $line =~/\*126\*\d{9,9}\*(\d{1,5})#/ and $1<=20000)
>
>Спасиба всем, помогли очень.
>
>2angra, спасибо отдельное, Вы меня уже не в первый раз выручаете...

Народ мне очень стыдно, но помоему я сегодня глючу, а скрипт написать надо...
Подскажите плиз как мне подсчитать количество заданого символа в строке. Например сколько в строке запятых или звездочек.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "И снова regex...."  
Сообщение от angra (ok) on 21-Янв-08, 16:53 
Первое что приходит в голову:
perl -e '$_="a.s.d.f";@a=/\./g; print scalar(@a)'
Однако на больших объемах лучше что-то более скоростное поискать
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "И снова regex...."  
Сообщение от idle (ok) on 21-Янв-08, 16:59 
>[оверквотинг удален]
>>>if ( $line =~/\*126\*\d{9,9}\*(\d{1,5})#/ and $1<=20000)
>>
>>Спасиба всем, помогли очень.
>>
>>2angra, спасибо отдельное, Вы меня уже не в первый раз выручаете...
>
>Народ мне очень стыдно, но помоему я сегодня глючу, а скрипт написать
>надо...
>Подскажите плиз как мне подсчитать количество заданого символа в строке. Например сколько
>в строке запятых или звездочек.

echo ',,,'|perl -ne'print tr/,//'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "И снова regex...."  
Сообщение от Arpo email(ok) on 22-Янв-08, 12:26 
>[оверквотинг удален]
>>>Спасиба всем, помогли очень.
>>>
>>>2angra, спасибо отдельное, Вы меня уже не в первый раз выручаете...
>>
>>Народ мне очень стыдно, но помоему я сегодня глючу, а скрипт написать
>>надо...
>>Подскажите плиз как мне подсчитать количество заданого символа в строке. Например сколько
>>в строке запятых или звездочек.
>
>echo ',,,'|perl -ne'print tr/,//'

Спасибо всем за помощ.... :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру