@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"