Si sus expresiones regulares no son triviales individuales cuerdas, y que se preocupan por la eficiencia, que querría que los represente en una sola NFA (nondeterministic finite-state automaton, con valores en los estados finales. Si es posible que una entrada coincida con más de una expresión regular, los estados finales necesitarían un conjunto de valores.
En este punto, está preparado para considerar la optimización del autómata. Si se puede determinar de forma práctica (esto le da un DFA que puede ser exponencialmente más grande que el NFA), entonces, por supuesto, haga eso. Una vez que tiene un DFA, puede minimizarlo de manera eficiente (y únicamente hasta el isomorfismo) (pero dado que tiene valores en sus estados finales, se necesita una modificación obvia del usual algorithm).
También hay técnicas para minimizar NFA directamente. Por ejemplo, si dos estados tienen los mismos conjuntos de sufijos ({(resto de cadena, valor)}) son equivalentes y se pueden combinar. La equivalencia en un NFA acíclico puede realizarse a través del hash-consing a partir de los estados finales.
Basado en las respuestas hasta ahora, es posible que desee proporcionar más detalles en su pregunta sobre su aplicación en particular. –
¿Aproximadamente cuántas expresiones hay en una tonelada? ¿Qué tan grande es el texto que van a coincidir? ¿Con qué frecuencia se proporcionará un nuevo texto? ¿Qué tan rápido deben devolverse los resultados? – TrueWill