Хорошо, это регулярное выражение будет состоять из двух частей: целое число (необязательно):
(:?-?\d+ )?
и дробная часть:
-?\d+/-?\d+
И нам нужно соответствовать полномустрока;итак:
^(:?-?\d+ )?-?\d+/-?\d+$
Немного тестирования:
PS> $re=[regex]'^(:?-?\d+ )?-?\d+/-?\d+$'
PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{$_ -match $re} | gu
True
Однако, это также учитывает "-12 -2/-3"
или такие вещи, как "1 -1/2"
, которые не имеют особого смысла.1015 *
ETA: Ваше оригинальное регулярное выражение тоже работает.Ему просто не хватало якорей для начала и конца строки (^
и $
соответственно).Добавление тех заставляет это работать правильно.