Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
17 usuarios Online (0)
Darse de alta en la web | Recuperar password   

Datos del Archivo

  • Autor/es: Arias
  • Fecha de alta: 12-03-2005
  • Descargas: 7247

Votación

No estás registrado

Descarga

Archivo html

Descargar Archivo

(29,56 KB)

Otras versiones

No hay

Manual de Expresiones Regulares v1

Valoración (4,67 en 3 votaciones )

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.

Características de esta versión:

Esta información no se encuentra disponible en este momento


Comentarios (3)

Avatar de Arias #1 Arias
28 mar 05 (15:38)
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"
Avatar de broken #2 broken
05 dic 06 (04:34)
Exelente, siempre Arias aportando sus conosimientos para ayudarnos a mejorar nuestros Script y porque no nuestra sabiduria =)
Avatar de Arias #3 Arias
18 feb 07 (13:11)
Puse cuantificadas con * y luego voy y escribo un ? xDD

La regex de verdad seria: "(\"|\').*?(?<!\\\\)(?:\\\\\\\\)*\1"
Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster