ローマ数字の正規表現マッチャーを作成しようとしています。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"