Попытка написать регулярное выражение для римских цифр. В sed (который, я думаю, считается "стандартным" для регулярного выражения?), Если у вас есть несколько опций, ограниченных оператором чередования, он будет соответствовать самому длинному. А именно, "I|II|III|IV"
будет соответствовать "IV" для "IV" и "III" для "III"
В Java такой же шаблон соответствует "I" для "IV" и "I" для "III". Оказывается, Java выбирает между чередованием совпадений слева направо; то есть, потому что "Я" появляется перед "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"