Проверка регулярных выражений для смешанных дробей — Visual C++ 2012

Я новичок в RegEx, работаю в Visual Studio (C++), и мне нужно проверить, является ли ввод допустимой смешанной дробью.

Пока то, что у меня есть, работает во всех случаях, за исключением того, что я хочу убедиться, что знаменатель не может быть равен 0 (например, 2 3/0 ).

Вот RegEx, который я сейчас использую:

regex mixedFraction("(-?[[:digit:]]+)[\\s]([[:digit:]]+)[/]([[:digit:]]+)")

Я пробовал варианты, но не могу понять что-то, что работает. По сути, мне просто нужно проверить, что только первая цифра знаменателя не равна 0 - все будет нормально, если кто-то введет «2 3/01».

Спасибо за любую помощь


person David Griffith    schedule 12.10.2013    source источник


Ответы (2)


Это должно сработать для вас.

regex mixedFraction("(-?[0-9]*)\\s([0-9]*)/([1-9][0-9]*)")
person hwnd    schedule 12.10.2013

я ничего не знаю о С++ или его реализации регулярных выражений, поэтому синтаксис может немного отличаться:

\d+\s\d+/[^0]

это будет соответствовать смешанным дробям, где знаменатель не равен нулю

я не использую эти глупые :digit: штучки, так что \d будет достаточно

person gwillie    schedule 12.10.2013
comment
Я пытался использовать вашу рекомендацию, но, похоже, это не сработало. Я пробовал: [[:digit:]]+/[^0], что, похоже, ничего не меняло, а варианты просто вылетали или не сравнивались правильно - person David Griffith; 12.10.2013
comment
это нехорошо ... это сработало для меня, но, как я уже сказал, я более чем наивен, когда дело доходит до регулярных выражений С++, и у меня нет возможности протестировать С++. но вы нашли свой ответ, так что все хорошо :) - person gwillie; 12.10.2013