Si tiene varios cientos de palabras, debe tener cuidado con el orden de las palabras en la expresión regular. El motor de expresiones regulares busca las palabras de izquierda a derecha.
Si prueba la palabra setValue
en la alternancia set|setValue
, coincidirá solo con las 3 letras que comprenden "conjunto" y no con toda la cadena.
Consulte esto link (de www.regular-expressions.info) para la explicación completa.
No creo que el motor de expresiones regulares verdaderamente optimice las alternancias (es decir, analizar prefijos comunes y construir nfa en consecuencia). Por lo tanto, con tantas palabras, no creo que sea una optimización.
Además de volver a ordenar las palabras, también puede intentar agregar un límite de palabra o línea después de la alternancia, p. Ej. (set|setValue)$
, pero sospecho que el motor de expresiones regulares hará una gran cantidad de retrocesos por lo que puede no valer la pena el esfuerzo.
[Allí] (http://www.javaworld.com/javaworld/jw-09-2007/jw-09-optimizingregex.html?page=2) dice: _Tened en cuenta la alternancia. Las expresiones regulares como "(X | Y | Z)" tienen la reputación de ser lentas, así que ten cuidado con ellas_ – millebii
** [...] en lugar de "(abcd | abef)" usar "ab (cd | ef)" [...] "* - Esta es la forma más trivial de optimización, y me sorprendería mucho si el motor de expresiones regulares de Java no lo hiciera. – aioobe
@aioobe no es muy útil, con varios cientos de palabras, ¿cómo lo haces? Creo que puedo usar eso – millebii