Я думаю, что шаблон, который будет работать, похож на
IV|I{1,3}
См. Раздел «Жадные квантификаторы» в http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html
Редактировать: в ответ наВаш комментарий, я думаю, что общая проблема заключается в том, что вы продолжаете использовать чередование, когда это не правильно.В вашем новом примере вы пытаетесь сопоставить «шесть» или «шестьдесят»;правильный шаблон для использования - six(ty)?
, а не six|sixty
.В общем, если у вас когда-либо есть два члена группы альтернатив, так что один является префиксом другого, вам следует переписать регулярное выражение, чтобы устранить его.В противном случае вы не сможете жаловаться, что движок делает не то, что нужно, поскольку семантика чередования ничего не говорит о самом длинном совпадении.
Правка 2: буквальный ответ на ваш вопрос - нет,это не может быть принудительно (и мой комментарий заключается в том, что вам никогда не нужно такое поведение).
Редактировать 3: больше думая о предмете, мне пришло в голову, что шаблон чередования, где одна строка являетсяпрефикс другого нежелателен по другой причине;а именно, это будет медленнее, если базовый автомат не будет создан для учета префиксов (и учитывая, что Java выбирает первое совпадение в шаблоне, я бы предположил, что это не так).