Оператор чередования регулярных выражений Java "|" поведение кажется нарушенным

Попытка написать сопоставление регулярных выражений для римских чисел. В sed (который, я думаю, считается «стандартным» для регулярных выражений?), Если у вас есть несколько параметров, разделенных оператором чередования, он будет соответствовать самому длинному. А именно, «I | II | III | IV» будет соответствовать «IV» для «IV» и «III» для «III»

В Java тот же шаблон соответствует «I» для «IV». »и« I »вместо« III ». Оказывается, Java выбирает совпадения чередования слева направо; то есть, поскольку «I» стоит перед «III» в регулярном выражении, это соответствует. Если я изменю регулярное выражение на «IV | III | II | I» , поведение исправлено, но в целом это явно не решение.

Есть ли способ заставить Java выбирать самое длинное совпадение из группы чередования вместо выбора «первого»?

Пример кода для ясности:

public static void main(String[] args)
{
    Pattern p = Pattern.compile("six|sixty");
    Matcher m = p.matcher("The year was nineteen sixty five.");
    if (m.find())
    {
        System.out.println(m.group());
    }
    else
    {
        System.out.println("wtf?");
    }
}

Это выводит "шесть"

12
задан Unihedron 10 October 2014 в 10:32
поделиться