Я хочу сопоставить римские числа, используя регулярные выражения Groovy (я не пробовал это в Java, но должно быть таким же).
На этом сайте я нашел ответ, в котором кто-то предложил следующее регулярное выражение:
/M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})/
Проблема в том, что выражение типа /V?I{0,3}/
не является жадным в Groovy.
Поэтому для такой строки, как «Книга номер VII», сопоставитель /V?I{0,3}/
возвращает «V», а не «VII», как хотелось бы.
Очевидно, что если мы используем шаблон /VI+/
, тогда мы ДЕЙСТВИТЕЛЬНО получаем совпадение "VII" ... но это решение недействительно, если строка является чем-то вроде "Книги номер V", поскольку мы не получим совпадений ...
Я пытался добиться максимального захвата символов с помощью жадного квантификатора /VI{0,3}+/
или даже /VI*+/
, но я все еще получаю совпадение "V" над "VII"
Есть идеи?