Tengo una lista creciente de expresiones regulares que estoy usando para analizar a través de archivos de registro en busca de errores "interesantes" y declaraciones de depuración. Actualmente los estoy dividiendo en 5 cubos, y la mayoría caen en 3 cubos grandes. Tengo más de 140 patrones hasta ahora, y la lista continúa creciendo.¿Cómo puedo combinar de manera eficiente muchos patrones de expresiones regulares diferentes en Perl?
La mayoría de las expresiones regulares son simples, pero también son bastante únicas, por lo que mis oportunidades de detectar múltiples coincidencias con un solo patrón son pocas y distantes. Debido a la naturaleza de lo que estoy igualando, los patrones tienden a ser oscuros y por lo tanto rara vez coinciden, así que estoy haciendo un montón de trabajo en cada línea de entrada con el resultado final de que no puede coincidir con nada, o coincide uno de los genéricos al final.
Y debido a la cantidad de entrada (cientos de megabytes de archivos de registro) a veces estoy esperando uno o dos minutos para que el script termine. De ahí mi deseo de una solución más eficiente. Aunque no estoy interesado en sacrificar la claridad por la velocidad.
que actualmente he puesto las expresiones regulares de esta manera:
if (($line =~ m{Failed in routing out}) ||
($line =~ m{Agent .+ failed}) ||
($line =~ m{Record Not Exist in DB}) ||
...
¿Hay una mejor manera de estructurar este por lo que es más eficiente, y aún así fácil de mantener? ¡Gracias!
Definitivamente el camino a seguir. Tengo una aplicación actualmente en producción que usa Regexp :: Assemble para comparar cadenas de texto entrantes con una lista de 1.334 términos para ver cuáles (si las hay) de ellas en cada cadena. El código es simple como el demonio y funciona bien y rápido. –