El comportamiento del operador de alternancia de expresiones regulares Java "|" parece roto

Intentando escribir un comparador de expresiones regulares para números romanos. En sed (que creo que se considera 'estándar' para la expresión regular?), Si tiene varias opciones delimitadas por el operador de alternancia, coincidirá con la más larga. A saber,"I|II|III|IV" coincidirá con "IV" para "IV" y "III" para "III"

En Java, el mismo patrón coincide con "I" para "IV" e "I" para "III". Resulta que Java elige entre coincidencias de alternancia de izquierda a derecha; es decir, porque "I" aparece antes de "III" en la expresión regular, coincide. Si cambio la expresión regular a"IV|III|II|I", el comportamiento se corrige, pero esto obviamente no es una solución en general.

¿Hay alguna manera de hacer que Java elija la coincidencia más larga de un grupo de alternancia, en lugar de elegir el 'primero'?

Una muestra de código para mayor claridad:

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?");
    }
}

Esto salidas"six"

Respuestas a la pregunta(2)

Su respuesta a la pregunta