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