Manual de Expresiones Regulares - Versión 1
En este manual intento explicar el funcionamiento y la construcción de una expresión regular desde lo mas básico, aun así si nunca has trabajado con expresiones regulares puede que te resulte dificil familiarizarte con ellas.
Leer el documento pausadamente, probad las cosas y sobre todo: probad cosas diferentes. Si no entendeis una parte del documento, no avanceis, la dificultad es creciente, releerlo y si teneis dudas preguntar en el canal.
Leer el documento pausadamente, probad las cosas y sobre todo: probad cosas diferentes. Si no entendeis una parte del documento, no avanceis, la dificultad es creciente, releerlo y si teneis dudas preguntar en el canal.
Comentarios
|
#3
Arias 18 feb 07 Puse cuantificadas con * y luego voy y escribo un ? xDD
La regex de verdad seria: "(\"|\').*?(?<!\\\\)(?:\\\\\\\\)*\1" |
|
#2
broken 05 dic 06 Exelente, siempre Arias aportando sus conosimientos para ayudarnos a mejorar nuestros Script y porque no nuestra sabiduria =)
|
|
#1
Arias 28 mar 05 La expresión regular de detectar que fui mareando por todo el documento podria mejorarse aun un pokito mas... Al final llegamos a esta expresion regular: "(\"|\').*?(?<!\\\\)\1"... Si tubieramos por ejemplo que detectar la cadena "Hola \\" (dos barras dentro de la cadena) no funcionaria bien, porke no considera que la barra esta escapada...
La solución a este problema no es trivial... Si no ponemos a pensar: una barra sola si escapa las comillas; dos barras no excapan las comillas; tres barras si espacan las comillas; cuatro no; cinco si... Depende del numero de barras que tengamos las comillas estan escapadas o no, por ejemplo "Hola \\\\\" si estaria escapada la cadena mientras que "Hola \\\\\\" no... Viendo los número es facil darse cuenta de que cuando el numero de barras es par, las comillas no estan escapadas y si cuando son impares. Pero como podemos detectar esto con una expresión regular? La cosa es bastante sencilla: solo tenemos que añadir delante de la asercion lookbehind dos barras cuantificadas con *, asi siempre buscariamos una comilla que no tubiera una barra y una sucesion par de barras invertidas detras... La expresión regular final seria: "(\"|\').*?(?<!\\\\)(?:\\\\\\\\)?\1" |
Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano,
:: Registrar ::
Datos de la versión
Descargar versión
HTML (29,56 KB)
Valoración
No estás registrado
Características de la versión
No existe descripción asociada
Todas las versiones
- No existe ninguna otra versión disponible
