Depende de si tienes una expresión regular o una expresión regular: las expresiones regulares son malvadas, pero las expresiones regulares son algo bello y nunca te volverán malvado.
Por regexp, me refiero a una expresión regular moderna: es decir, una expresión regular con características modernas adicionales tales como referencias inversas, por ejemplo, una expresión regular compatible con Perl. Esto es más poderoso que una expresión regular clásica de un libro de texto de teoría formal de lenguajes / autómatas, ya que las expresiones regulares clásicas no permiten referencias posteriores, mirar hacia adelante, mirar hacia atrás, etc.
norteO ( n )
Esto depende de la implementación del comparador de expresiones regulares. Si tiene una implementación ingenua o deficiente del emparejador, la correspondencia podría llevar un tiempo exponencial; Ciertamente hay algoritmos con esa propiedad. Pero la mejor respuesta a eso es probablemente no cambiar la expresión regular; Probablemente sea mejor elegir un mejor emparejador, si le preocupan los ataques de denegación de servicio.
En comparación, algunas expresiones regulares modernas son inevitablemente malvadas. Si tiene una expresión regular moderna, la coincidencia puede requerir un tiempo exponencial. En particular, las expresiones regulares con referencias inversas pueden reconocer lenguajes NP-hard. En consecuencia, bajo supuestos plausibles, existe una clase de expresiones malvadas en las que la prueba de un partido lleva un tiempo exponencial. Por lo tanto, algunas expresiones regulares modernas son inevitablemente malvadas: no hay una manera factible de encontrar una expresión regular equivalente que no cause una explosión exponencial en el tiempo de ejecución para que coincida.
(Tal equivalente podría existir e incluso podría encontrarse en teoría, pero bajo supuestos plausibles, encontrar la expresión regular equivalente tomará un tiempo exponencial, lo cual no es factible en la práctica. Si tuviera un procedimiento sistemático para encontrar la expresión regular equivalente en tiempo polinómico , entonces podría resolver el problema NP-hard en tiempo polinomial, demostrando que P = NP. No sirve de mucho que exista una expresión regular equivalente si no hay forma de encontrarla en su vida).
Antecedentes y fuentes: