¿Hay alguna herramienta que tome una expresión regular particular y devuelva el peor de los casos en términos del número de operaciones requeridas para un cierto número de caracteres con los que se compara la expresión regular?Peor análisis de casos para expresiones regulares
Entonces, por ejemplo, dado un (f|a)oo.*[ ]baz
, ¿cuántos pasos podría hacer el motor para coincidir con 100 caracteres?
También me interesaría si hay una herramienta que puede tomar un montón de muestras de texto y mostrar las operaciones promedio para cada ejecución.
Me doy cuenta de que esto dependerá mucho del motor utilizado y de la implementación, pero ignoro qué tan común es esto. Entonces, si es común para muchos idiomas (lo que hace que mi pregunta sea demasiado vaga) estaría particularmente interesado en Perl y Python.
¡Excelente pregunta! Obviamente, dependerá de la expresión regular. Es bien sabido que las expresiones regulares puras (incluso el ejemplo '(x + x +) + y' al que se hace referencia más adelante) admiten un autómata de máquina de estado finito puro, pero que las bibliotecas de expresiones regulares comunes realmente implementan aquellas con retroceso, en gran parte para respaldar la fantasía cosas como el contexto. Una herramienta como usted describe sería excelente para atrapar http://en.wikipedia.org/wiki/Regular_expression_Denial_of_Service_-_ReDoS –