PHP-Hispano.net Comunidad hispana de desarrollo web

Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?

25 usuarios Online (0)

Darse de alta en la web | Recuperar password   

Manual de Expresiones Regulares - Versión 1

por Arias Enviado 12 mar 05 12988 descargas (Descargar) Categoría Manuales

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.

Comentarios

Avatar de Arias #3 Arias
18 feb 07
Puse cuantificadas con * y luego voy y escribo un ? xDD

La regex de verdad seria: "(\"|\').*?(?<!\\\\)(?:\\\\\\\\)*\1"
Avatar de broken #2 broken
05 dic 06
Exelente, siempre Arias aportando sus conosimientos para ayudarnos a mejorar nuestros Script y porque no nuestra sabiduria =)
Avatar de Arias #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 ::
Login / Password   

Datos de la versión

(4,75) Valoración Version 1

12 mar 05 3 comentarios 12988 descargas

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

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