2012-01-25 16 views
33

¿Qué significa usar una expresión regular de retroceso?En expresiones regulares, ¿qué es un retroceso/referencia inversa?

Además, ¿podrías darnos un ejemplo de esto?

+0

Suponiendo * backtrace * = retroceder, pregunta similar: [¿Qué expresión regular requiere retroceder?] (Http://stackoverflow.com/questions/8132412/which-expression-requires-backtracking) –

+0

Ah, gracias. Sí. – chrisjlee

+0

Hay algunos buenos ejemplos con una explicación completa en http://www.regular-expressions.info/catastrophic.html – bkzland

Respuesta

53

Backreferences y backtracking son dos cosas diferentes. El primero usa los resultados de una captura posterior en el código, p.

(['"]).*?\1 

Esto coincidirá con una cadena de una o dos comillas (ignorando los escapes por el momento). Utiliza una referencia inversa para referirse al símbolo abierto (la comilla simple o doble) para que coincida con el final.

Retroceder, por otro lado, es lo que las expresiones regulares hacen de forma natural durante el curso de la coincidencia cuando falla una coincidencia. Por ejemplo, si estoy a juego la expresión

.+b 

con la cadena

aaaaaabcd 

entonces primera coincidirá aaaaaabc en el .+ y compara b contra la d restante. Esto falla, por lo que retrocede un poco y coincide con aaaaaab para el .+ y luego compara el b final contra el c. Esto también falla, por lo que retrocede nuevamente e intenta aaaaaa para el .+ y coincide con el b frente al b y se realiza correctamente.

+0

¡Genial! Ejemplo.. – SIslam

Cuestiones relacionadas