AlexGK wrote:
> Столкнулся с проблемой: необходимо проверить является ли строка числом,
> формат такой:
>
> [+ или -] {набор цифр}[.набор цифр] [E [+ или -] набор цфир не более 5-ти]
>
> в квадратных скобках — необяхательная конструкция
> т.е. например:
>
> 1) -0001.2323 e +345
> 2) +1232
> 3) +013.123
>
> В общем- вещественное число в научном формате. И мне необходимо
> проверить соответствует ли строка формату или нет. Вот сижу пытаюсь
> сделать регулярное выражение в стиле Perl, но что-то совсем не
> получается — никогда ранее с регулярными выражениями не сталкивался.
>
> Как составить рег. выр. для этого?
[+-]?\d+(\.\d*)?([eE][+-]?\d{1,5})?
Posted via RSDN NNTP Server 2.0
AlexGK wrote:
> kan>[+-]?\d+(\.\d*)?([eE][+-]?\d{1,5})?
>
> Как ни странно — не подошло, как я понял проблема в знаке \d При замене
> на [0-9] работает. Так можно?
Можно. А почему не работает — не знаю, надо конкретный случай рассматривать, приводи код, может надо слеш удвоить?
А если работает, то, скажем "12!23" матчит?
Posted via RSDN NNTP Server 2.0
Здравствуйте, kan, Вы писали:
kan>AlexGK wrote:
kan>Можно. А почему не работает — не знаю, надо конкретный случай рассматривать, приводи код, может надо слеш удвоить?
kan>А если работает, то, скажем "12!23" матчит?
Ну видимо, потому что использую boost::regex там стиле Perl но видимо не все.
У меня получилось в конце концов такое выражение:
[[:space:]]{0,}((((([0-9]{1,}[\.]{1}[0-9]{1,})|([0-9]{1,}[\.]{1})|([\.]{1}[0-9]{1,})|([0-9]{1,}))|(([+-]{1}[[:space:]]{0,}[0-9]{1,}[\.]{1}[0-9]{1,})|([+-]{1}[[:space:]]{0,}[0-9]{1,}[\.]{1})|([+-]{1}[[:space:]]{0,}[\.]{1}[0-9]{1,})|([+-]{1}[[:space:]]{0,}[0-9]{1,}))){0,1}([[:space:]]{0,}[eE][[:space:]]{0,}[+-]{0,1}[[:space:]]{0,}[0-9]{1,}){0,1})|([+-]{0,1}[[:space:]]{0,}[eE][[:space:]]{0,}[+-]{0,1}[[:space:]]{0,}[0-9]{1,}))[[:space:]]{0,}
Работае корректно, такая трех этажность обусловлена тем, что я не знаю как записать такое выражение:
допустим есть лексемы A B C D, нужно что-то типа A&(B|C|D) ? где & — справделиво только в случае если справделивы обе части, а | — это не чисто или, а допускающее сочетания, т.е. B BC BCD BD CD
Я пробовал сделать в виде:
A{0,1}(B{0,1}C{0,1}D{0,1}){1} Но выражение в скобках в таком случае может быть пустым, поэтому выражени корректно если в тексте есть только A.
Как записать такое выражение в компактном виде, не перебирая сочетаний?