Здравствуйте, 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.
Как записать такое выражение в компактном виде, не перебирая сочетаний?