Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Регулярные выражения: как проверить вхождение числа в диапазон   Найти похожие ветки 

 
bss   (2010-06-07 19:18) [0]

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

Пример: \d{1,5} - разрешает вводить пятизначное число. Фактически, ограничение - от "0" до "99999". А хотелось бы задавать конкретный диапазон, например, от "45" до "567"


 
xayam ©   (2010-06-07 19:26) [1]

а чем условный оператор не устраивает?


 
bss   (2010-06-07 19:31) [2]

Тем, что мне нужно описать это в терминах регулярных выражений.


 
Медвежонок Пятачок ©   (2010-06-07 19:32) [3]

Пример: \d{1,5} - разрешает вводить пятизначное число

и стодвадцатипятизначное тоже позволяет


 
test ©   (2010-06-07 19:35) [4]

Либо выбран не нужный инструмент для задачи, либо задача предполагает что то еще, если это телефонный номер то задача имеет смысл, но почему бы для экономии всего не перевести в integer и не сравнить?


 
Медвежонок Пятачок ©   (2010-06-07 19:37) [5]

и даже

"мама вымыла раму 12345 раз стоя на подоконнике"

тоже позволяет.


 
bss   (2010-06-07 19:39) [6]


> и стодвадцатипятизначное тоже позволяет

если это серьезный коммент - то нет, не позволяет. Строчка 574693 не соответствует регулярному выражению \d{1,5}

Если же ты прекрасно понял о чем идет речь, но решил от нечего делать придираться к формулировке вопроса - спасибо за комент.


 
Медвежонок Пятачок ©   (2010-06-07 19:44) [7]

if ExecRegExpr("\d{1,5}","12345678944141414124124141241241241241") then ShowMessage("ok");


 
Медвежонок Пятачок ©   (2010-06-07 19:45) [8]

if ExecRegExpr("\d{1,5}","мама вымыла раму 12345 раз стоя на подоконнике") then ShowMessage("снова сработало");


 
Медвежонок Пятачок ©   (2010-06-07 19:48) [9]

регулярками это разумеется можно ограничить.
только само выражение будет длиннее паскалевского кода аналогичной алгоритмической проверки

PS красную площадь тоже можно без проблем подмести зубной щеткой.


 
Leonid Troyanovsky ©   (2010-06-07 19:49) [10]


> Медвежонок Пятачок ©   (07.06.10 19:45) [8]

Мама устала.

--
Regards, LVT.


 
Медвежонок Пятачок ©   (2010-06-07 19:57) [11]

скорее устанет тот кто начнет сочинять выражение по формулировке в вопросе.


 
bss   (2010-06-07 19:59) [12]


> if ExecRegExpr("\d{1,5}","12345678944141414124124141241241241241")
> then ShowMessage("ok");

ты про начало, конец строки? Я пользуюсь DevExpress"овской реализацией, там немного по-другому. Если я правильно тебя понял, то тебе понятнее будет так: ^\d{1,5}$

спасибо большое за замечание


 
Медвежонок Пятачок ©   (2010-06-07 20:09) [13]

ну тогда остается замечание про красную площадь и зубную щетку.
оно в силе.

написать такую регулярку можно, но она будет очень похожа на список всех допустимых вариантов строки.
фактически всех комбинаций.

написать можно, читать трудно. поддерживать при смене условий - просто нереально.


 
bss   (2010-06-07 20:13) [14]

думаю, есть способ более оптимальный


 
Медвежонок Пятачок ©   (2010-06-07 20:14) [15]

конечно есть.
алгоритмический.


 
bss   (2010-06-07 20:46) [16]

как же это характерно для данного сайта...

Я же говорю - мне нужно это реализовать на регулярных выражениях. Не стоит мне объяснять, что то, чего я хочу - мне не нужно.


 
Медвежонок Пятачок ©   (2010-06-07 20:59) [17]

нужно - флаг в руки.
пиши все допустимые комбинации


 
b z   (2010-06-07 21:27) [18]


> А хотелось бы задавать конкретный диапазон, например, от
> "45" до "567"
 [1-4][0-9][0-9]|[5][0-5][0-9]|[5][6][0-7]|[1-4]?[4-9][5-9]
? :)


 
Медвежонок Пятачок ©   (2010-06-07 21:35) [19]

ага щаз

"44" - и уже мимо.


 
инспектор   (2010-06-07 21:37) [20]


> как же это характерно для данного сайта...


Тебя здесь насильно держат или ты других сайтов не знаешь ? Их много, поверь.

А то мало того, что хочешь странного, так еще и наезжаешь, ламер недоделанный.


 
b z   (2010-06-07 22:17) [21]


> "44" - и уже мимо.
Так по условию и должно быть мимо. Однако, да, выражение не до конца верно, но думаю, что автору направление поиска по диапозону понятно.


 
Медвежонок Пятачок ©   (2010-06-07 22:25) [22]

Так по условию и должно быть мимо

[1-4][0-9]

"44" мимо не по условию, а по приведенному выражению

Однако, да, выражение не до конца верно

Скромняга.
Я бы сказал, что оно от начала и до конца неверно


 
b z   (2010-06-07 22:37) [23]

Там выражение совсем другое...


 
Медвежонок Пятачок ©   (2010-06-07 22:43) [24]

я взял самое начало, для первых двух символов. причем всего один вариант.

и уже мимо.
второй символ должен зависеть от первого. а он сам по себе [0-9]


 
bss   (2010-06-08 15:02) [25]

В ЖЖ в течении часа подсказали отличную ссылку:

http://utilitymill.com/utility/Regex_For_Range

Для приведенного в топике примера от "45" до "567" получилось:

\b0*(4[5-9]|[5-9][0-9]|[1-4][0-9]{2}|5[0-5][0-9]|56[0-7])\b

учитывая автоматизм составления - сойдет. Уверен был, что где-то это уже давно разжевано.


 
test ©   (2010-06-08 16:59) [26]

bss   (08.06.10 15:02) [25]
Жадные зеленые человечки ))
В теле страницы нет javascript с кодом решения.


 
Медвежонок Пятачок ©   (2010-06-08 17:02) [27]

Уверен был, что где-то это уже давно разжевано.

Это точно. Причем прямо в этой ветке. в 13 посте.

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


 
bss   (2010-06-08 17:53) [28]


> но она будет очень похожа на список всех допустимых вариантов
> строки

я это понял как:

0|1|2|3|4|5|6|7|8|9|10|11|12|13...

и так далее. Что, конечно, бред.
В общем, проблема решена.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.063 c
2-1268397398
timekiller
2010-03-12 15:36
2010.08.27
Интерактивный генератор текстов


2-1271243243
Delphist2
2010-04-14 15:07
2010.08.27
запуск приложения с параметрами


2-1269587670
Свободный художник
2010-03-26 10:14
2010.08.27
Захват окна


15-1266214599
Дмитрий С
2010-02-15 09:16
2010.08.27
У вас работает virtual treeview в delphi2010?


15-1264199176
tesseract
2010-01-23 01:26
2010.08.27
эл деньги





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский