尝试为罗马数字编写正则表达式匹配器。在 sed 中(我认为这被认为是正则表达式的“标准”?),如果您有多个由交替运算符分隔的选项,它将匹配最长的选项。即,"I|II|III|IV"
将为“IV”匹配“IV”,为“III”匹配“III”
在 Java 中,相同的模式匹配“IV”的“I”和“III”的“I”。原来 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"