Название: [РЕШЕНО] Помогите составить регулярное выражение Отправлено: Andrew12 от Январь 21, 2012, 12:05 Здравствуй, многоуважаемый All
Никак не покоряются регулярные выражения. Помогите составить, соответствующее формату целого и дробного числа. Может также кто-нить сбросит ссылку на внятное объяснение как составлять regexp. Спасибо. Название: Re: Помогите составить регулярное выражение Отправлено: SimpleSunny от Январь 21, 2012, 13:28 А какие у вас форматы записи чисел предусмотрены?
Название: Re: Помогите составить регулярное выражение Отправлено: Andrew12 от Январь 21, 2012, 13:44 Мне необходимо проверить и получить true в случае если в строке float или double в формате, например, 1234.465 или 28464,28.
Название: Re: Помогите составить регулярное выражение Отправлено: kambala от Январь 21, 2012, 13:45 нагуглить такие простые регэкспы должно быть несложно ;)
с целыми числами всё просто: \d+ Объяснение: \d означает любую цифру; + - повторение предыдущего символа (т.е. любой цифры) не менее 1 раза, т.е. валидными будут 1, 5, 0, 12, 34545, ... . если окружить этот регэксп круглыми скобками, то число сохранится в переменной $1 или \1 или в QRegExp::cap(1) (всё зависит от того, где ты их используешь). с дробными уже немного посложнее. \d*\.?\d+ Объяснение: * - повторение предыдущего символа (т.е. любой цифры) не менее 0 раз, т.е. в этом месте цифры вообще могут отсутствовать; \. - точка (\ перед ней необходим, т.к. в регэкспах просто символ . означает любой символ), ? - предыдущий символ (точка) может присутствовать, а может и нет (в этом месте валидными строками уже будут 1., 1, 12, 345., ., пустая); ну и последняя часть уже известна. таким образом, валидными строками будут 3, 3.5, 3.456, 1234, 456.5, 345.567, .1, .456 (когда перед точкой нет цифры, это подразумевает 0 целых) в примерах не учитывается знак перед числом. если это нужно, то просто допиши в начало [-+]? - квадратные скобки означают вхождение любого из символов внутри них, ну а ? я уже описал. как научиться им: говорят книга Фридла очень хорошая, но в приципе хелпа по QRegExp/мана в юниксовой справке/документации Перла должно быть достаточно. edit: раз необходима поддержка запятой, то замени \. на [,.] Название: Re: Помогите составить регулярное выражение Отправлено: SimpleSunny от Январь 21, 2012, 14:07 Не валидной будет вполне корректная запись 125.
Название: Re: Помогите составить регулярное выражение Отправлено: Andrew12 от Январь 21, 2012, 14:37 Всем спасибо. С задачей пока справился, буду исследовать дальше.
Название: Re: [РЕШЕНО] Помогите составить регулярное выражение Отправлено: kambala от Январь 21, 2012, 15:54 Не валидной будет вполне корректная запись 125. и почему же это вдруг?Код
Название: Re: [РЕШЕНО] Помогите составить регулярное выражение Отправлено: SimpleSunny от Январь 21, 2012, 16:40 Я про запись, когда точка в конце стоит, если рассматривать как валидную ".235", то "235." ничем не хуже.
Название: Re: [РЕШЕНО] Помогите составить регулярное выражение Отправлено: kambala от Январь 21, 2012, 17:25 да, действительно, но технически запись с точкой в конце валидна.
если же такое нельзя, тогда \d*\.?\d+(?!.) сделает дело (при условии поддержки look-ahead assertions естественно). либо, если приемлемо, можно использовать ^\d*\.?\d+$ (одна строка - одно число). |