2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 регулярные выражения
Сообщение21.12.2009, 17:14 
Можете помоч правильно записать регулярное выражение
для ввода числа с плавающей точкой(с возможной експонентой).
Я вот написал но почемуто оно не работает так как я хочу
Код:
RegExp rx("[(-|+)]?[1-9]{1,}[0-9]{0,}\\.?[1-9]{1,}[0-9]{0,}(\\e[(-|+)]{,1}[1-9]{1,}[0-9]{0,}){0,1})?");

Проблема собственно в том что оно позволяет мне ввести какойто один левый символ.

 
 
 
 Re: регулярные выражения
Сообщение21.12.2009, 20:51 
Во-первых, попробуйте вставить в начало регулярного выражения символ '^', а в конец - '$' (чтобы делалась попытка сопоставить с образцом всю входную строку, а не её произвольный фрагмент).
Во-вторых, проверьте скобки: мне кажется, последняя закрывающая скобка не имеет парной открывающей.
Ну и в-третьих, странный у Вас какой-то образец для числа с плавающей точкой. В частности:
- первая цифра не может быть 0
- первая цифра дробной части тоже не может быть 0.

(Оффтоп)

Не помню откуда:
Если у программиста есть проблема и он думает — «Я решу ее при помощи регулярных выражений», то с этого момента у программиста уже две проблемы :)

 
 
 
 Re: регулярные выражения
Сообщение21.12.2009, 21:20 
а что разве может?

Нашол ошибку, получилось так:
Код:
RegExp rx("^[-+]?[1-9][0-9]{0,}\\.[1-9][0-9]{0,}(\\e[-+]?[1-9][0-9]{0,})?$");


проблема была когда я писал "[(-|+)]"(лично я писал так: либо'-' либо '+' ) на этом месте оно позволяло вводить себе любую букву.
Может ктото обяснит почему?

 
 
 
 Re: регулярные выражения
Сообщение21.12.2009, 21:27 
Nerazumovskiy в сообщении #273873 писал(а):
а что разве может?
А по-Вашему, 0.01 -- это неправильное число с плавающей точкой?

 
 
 
 Re: регулярные выражения
Сообщение21.12.2009, 21:57 
Nerazumovskiy в сообщении #273873 писал(а):
проблема была когда я писал "[(-|+)]"(лично я писал так: либо'-' либо '+' ) на этом месте оно позволяло вводить себе любую букву.
То, что вы написали, это либо '(', либо '-', либо '|', либо '+', либо ')'.

-- Пн дек 21, 2009 14:02:56 --

Nerazumovskiy в сообщении #273873 писал(а):
Нашол ошибку, получилось так:
Код:
RegExp rx("^[-+]?[1-9][0-9]{0,}\\.[1-9][0-9]{0,}(\\e[-+]?[1-9][0-9]{0,})?$");
А зачем бэкслэш перед 'e'? Кстати, тут может быть и 'E'.
Точка необязательна, да и цифры с одной стороны от точки.
Вот допустимые варианты, которые ваше выражение не примет:
.01
0.
001e001

 
 
 
 Re: регулярные выражения
Сообщение21.12.2009, 22:13 
venco в сообщении #273887 писал(а):
То, что вы написали, это либо '(', либо '-', либо '|', либо '+', либо ')'.
Скорее, это либо от '(' до '|', либо '+', либо ')' :)

 
 
 
 Re: регулярные выражения
Сообщение21.12.2009, 22:26 
Да с допустимостю єто я погарячился :)

 
 
 
 Re: регулярные выражения
Сообщение22.12.2009, 02:17 
Maslov в сообщении #273903 писал(а):
venco в сообщении #273887 писал(а):
То, что вы написали, это либо '(', либо '-', либо '|', либо '+', либо ')'.
Скорее, это либо от '(' до '|', либо '+', либо ')' :)
Точно! Т.е. почти все ASCII символы, кроме !"#$%&'}~

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group