1 de julio de 2008

Expresiones Regulares - Aprendiendo con ejemplos

Hace ya un tiempo escribí un post como introducción al tema de expresiones regulares, pero me faltaba publicar algunos ejemplos simples pero aplicables, así que voy a dejar y comentar algunos.


Direcciones IP {Corregido}

(^(2([0-4][0-9])|2(5[0-5]))|^([0-1]?[0-9]?[0-9]))\.(((2([0-4][0-9])|2(5[0-5]))|([0-1]?[0-9]?[0-9]))\.){2}((2([0-4][0-9])|2(5[0-5]))|([0-1]?[0-9]?[0-9]))$


Análisis:
  • (^(2([0-4][0-9])|2(5[0-5]))|^([0-1]?[0-9]?[0-9]))\. : Inicio de cadena (^), un número x que cumpla con: x >= 200 y x <= 249 (2([0-4][0-9]), ó cumpla con: x >= 250 y x <= 255 (2(5[0-5])), ó cumpla con x >= 0 y x <= 199 (([0-1]?[0-9]?[0-9])), seguido de un punto (\.)

  • (((2([0-4][0-9])|2(5[0-5]))|([0-1]?[0-9]?[0-9]))\.){2} : lo mismo que el término anterior pero repetido exactamente 2 veces ({2})

  • ((2([0-4][0-9])|2(5[0-5]))|([0-1]?[0-9]?[0-9]))$ : lo mismo que el primer término, pero en lugar de estar seguido de un punto, el número debe estar seguido del final de la cadena ($)


Casos de prueba:
  • 0.0.0.0

  • 10.10.0.1

  • 192.168.0.1

  • 200.40.30.245

  • 255.255.255.255



Número del documento de identidad (UY)

^\d\.\d{3}\.\d{3}-\d$

Análisis:
  • ^\d\. : Inicio de la cadena (^), un dígito (\d) y un punto (\.)

  • \d{3}\. : 3 ocurrencias de dígito (\d{3}) y un punto (\.)

  • \d{3} : 3 ocurrencias de dígito (\d{3})

  • -\d$ : un guión (-), un dígito (\d) y final de la cadena($)



Casos de prueba:
  • 1.234.567-8

Valida el formato, no la validez del número.


URI sin parámetros

^(http://)((\w+\.)?(\w+\.)?\w+\.(\w{2,3})(\.\w{2})?)(/(\w+)(/\w+)?(\.(\w{3,4}))?)?$

Análisis:
  • ^(http://) : Cadena http:// ubicada al inicio (^)

  • ((\w+\.)?(\w+\.)?\w+\. : 0 ó 1 ocurrencias de una cadena de caracteres seguida por un punto ((\w+\.)?), 0 ó 1 ocurrencias de una cadena de caracteres seguida por un punto ((\w+\.)?) y una cadena de caracteres seguida por un punto(\w+\.)

  • (\w{2,3}) : una cadena compuesta de 2 o 3 caracteres

  • (\.\w{2})? : 0 ó 1 ocurrencia de un punto (\.) seguido de una cadena compuesta de 2 caracteres (\w{2}?)

  • (/(\w+)(/\w+)?(\.(\w{3,4}))?)?$ : ésta parte de la cadena es opcional, por eso está encerrada entre paréntesis y seguida del indicador de 0 ó 1 ocurrencia (?). Las partes que forman la cadena opcional son: una barra (/), seguida de una cadena de carracteres (\w+), 0 ó 1 ocurrencia de una barra (/) seguida de una cadena de caracteres (\w+), 0 ó 1 ocurrencia de un punto (\.) seguido de una cadena de 3 ó 4 caracteres (\w{3,4}) y el final de la cadena ($)


Casos de prueba:
  • http://www.google.com.uy

  • http://google.com.uy

  • http://mail.server.com.uy

  • http://www.google.com.uy/index.html

  • http://myserver.com.uy/contacto.htm

  • http://mail.server.com.uy/contacto/send.php

  • http://www.picandocodigo.net

  • http://www.picandocodigo.net/foro


URI con parámetros

^(http://)((\w+\.)?(\w+\.)?\w+\.(\w{2,3})(\.\w{2})?)((/(\w+/?)+(/?\w+)?((\.(\w{3,4})?))?)(\?(\w+=[\w\+\-]+)((&\w+=([\w\+\-]?)+)?)+)?)

Análisis:
  • ^(http://)((\w+\.)?(\w+\.)?\w+\.(\w{2,3})(\.\w{2})?)((/(\w+/?)+(/?\w+)?((\.(\w{3,4})?))?) : ídem anterior.

  • (\?(\w+=[\w\+\-]+) : signo de interrogación (\?) seguido de una cadena de caracteres seguida del signo de igual(\w+=) seguido de una cadena de caracteres compuesta de 1 ó más ocurrencias de cualquier letra y/o los signos de + y - ([\w\+\-]+)

  • ((&\w+=([\w\+\-]?)+)?)+)?) :1 o más ocurrencias de: signo separador de parámetros (&), una cadena de caracteres seguida del signo de igual (\w=) seguida de 0 ó 1 ocurrencia de una cadena de caracteres formada por cualquier letra y/o signos de + y - (([\w\+\-]?)+)


Casos de prueba:
  • http://www.server.com.uy/index.html

  • http://server.com.uy/contacto.htm

  • http://mail.server.com.uy/contacto/send.php

  • http://mail.server.com.uy/contacto/forms/scripts/send.php?m=value1&n=value2

  • http://www.google.com/search

  • http://www.google.com.uy/search?q=the+ninth+gate&hl=es

  • http://www.google.com.uy/search?q=the+ninth+gate&meta=

7 comentarios:

WinterGrasp dijo...

la expresion regular de las IP rechaza los numeros mayores a 200 que tengan 6, 7, 8, o 9 en la unidad...

The Keeper Of The 7 Keys dijo...

@WinterGrasp: gracias por la acotación, ya la corregí y volví a publicar. Ahora doy fe de que funciona con los casos del post y además estos:

0.0.0.0
10.10.26.12
29.25.26.255
192.168.0.199
200.40.30.245
220.218.25.245
255.254.75.255

Anónimo dijo...

malo malo malo, donde dejas los .info :)


jajajaj saludos

http://www.tecnologiaslibres.net

The Keeper Of The 7 Keys dijo...

Es verdad :(

No lo tuve en cuenta, tampoco entrarían los .aero

avanzaweb dijo...

Siempre es bueno ver ejemplos de expresiones regulares. Aunque no te valgan los ejemplos siempre te pueden servir partes de ellos.

pablo dijo...

Una dirección IP del tipo: 009.005.127.04 no es válida, sin embargo, tu expresión regular dice que sí lo es, osea que no es del todo válida.

pablo dijo...

Ésta sí validaría correctamente una dirección ip: ^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$