@danben - Надеюсь, было очевидно, что я критиковал создателя, а не творение.

ка написать регулярное выражение для римских чисел. В 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?");
    }
}

Это выводы"six"

Ответы на вопрос(0)

Ваш ответ на вопрос