Digamos que tengo 10.000 expresiones regulares y una cadena y quiero averiguar si la cadena coincide con cualquiera de ellas y obtener todas las coincidencias. La manera trivial de hacerlo sería simplemente consultar la cadena una por una contra todas las expresiones regulares. ¿Hay una manera más rápida y más eficiente de hacerlo?Consulta eficiente de una cadena contra expresiones múltiples
EDIT: He intentado sustituirlo con DFA (lex) El problema aquí es que solo le daría un patrón único. Si tengo una cadena "hola" y los patrones "[H | h] ello" y ". {0,20} ello", DFA solo coincidirá con uno de ellos, pero quiero que ambos peguen.
Normalmente se trata de evitar la ambigüedad, por lo que hay criterios para elegir entre los patrones que pueden coincidir. Por lo general, se elige la coincidencia más a la izquierda más larga. Si tiene esta necesidad, probablemente tenga que escribir algo usted mismo –
Responda esto mientras responde una pregunta relacionada. Desde que se formuló esta pregunta en el año 2008, he lanzado una biblioteca Java de código abierto que puede usar para construir un DFA que le dará todas las expresiones que coincidan si lo desea: http://mtimmerm.github.io/dfalex/ –