Archivo

Archive for 12 septiembre 2014

Expresiones Regulares

Las expresiones regulares son una potente herramienta de programación que utilizan muchos lenguajes y que permiten hacer búsquedas complejas de cadenas y/o muy concretas para luego operar con ellas. El problema es que consumen muchos recursos por lo que es recomendable usarlas en casos donde no quepa otra solución más simple.

Hay dos tipo de expresiones regulares las compatibles con POSIX y las compatibles con PERL (PCRE), nos centraremos en éstas últimas por ser más extendidas.

Se construyen mediante una cadena de caracteres especialmente formado, para crear un “patrón”. Este patrón es un acrónimo de la cadena con la que queremos operar dentro de un texto, cuando el patrón coincide con alguna parte del texto (match), puede devolver TRUE,  parte del texto coincidente o incluso sustituirla por otra dependiendo de la función que usemos.

Las expresiones regulares utilizan para su construcción un lenguaje específico que usa metacaracteres, cuantificadores y agrupadores para construir la expresión en si. La expresión debe ir entre 2 caracteres iguales “/”, “{}” o “#”  Por ejemplo:

/ab?c/ - hace match con ac y abc.
/ab{1,3}c/ - hace match con abc, abbcy abbbc.

Metacaracteres:

  • a-zA-Z0-9 – Coincide con caracteres alfanuméricos (suele usarse dentro de [])
  • . (punto) coincide con cualquier carácter pero una sola vez, para más de un carácter hay que usar cuantificadores
  • ^ Coincide con el principio de una cadena
  • $ Coincide con el final de la cadena.

Cuantificadores:

  • *  coincide con cualquier carácter que aparece 0 ó mas veces.
  • +  coincide con cualquier carácter que aparece 1 ó mas veces.
  • {n} coincide con cualquier carácter que aparece exactamente n veces.
  • {n,} coincide con cualquier carácter que aparece n o más veces.
  • {n,m} coincide con cualquier carácter que aparece entre n y m veces.
  • ?  coincide con cualquier carácter que aparece 0 ó 1 una vez. También es un carácter especial
    • *? , +? , ?? minimiza la coincidencia a 1 resultado, puesto que tanto * como + pueden dar más de 1.
    • (?…) extensión de la notación

Agrupadores:

  • [] – Permiten agrupar creando rangos, por ejemplo /ab[0-5]+c/ hará match con cualquier string que contenga ab, una o más veces un número entre 0 y 5, y finalmente una c. Por ejemplo: ab12c.
    • x|y (OR) selecciona dentro del grupo a Ó b.
  • () – Nos permiten crear sub-expresiones, expresiones regulares contenidas dentro de otras: /a(bc.)+e/. Tiene un uso especial en formas como (…), que permite capturar todo lo que encierren los paréntesis, y (a|b) que hace match con a o b

Otros Caracteres especiales

  • \t — Representa un tabulador.
  • \r — Representa el “retorno de carro” o “regreso al inicio” o sea el lugar en que la línea vuelve a iniciar.
  • \n — Representa la “nueva línea” el carácter por medio del cual una línea da inicio. Es necesario recordar que en Windows es necesaria una combinación de \r\n para comenzar una nueva línea, mientras que en Unix solamente se usa \n y en Mac_OS clásico se usa solamente \r.
  • \a — Representa una “campana” o “beep” que se produce al imprimir este carácter.
  • \e — Representa la tecla “Esc” o “Escape”
  • \f — Representa un salto de página
  • \v — Representa un tabulador vertical
  • \x — Se utiliza para representar caracteres ASCII o ANSI si conoce su código. De esta forma, si se busca el símbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando “\xA9”.
  • \u — Se utiliza para representar caracteres Unicode si se conoce su código. “\u00A2” representa el símbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo.
  • \d — Representa un dígito del 0 al 9.
  • \w — Representa cualquier carácter alfanumérico.
  • \s — Representa un espacio en blanco.
  • \D — Representa cualquier carácter que no sea un dígito del 0 al 9.
  • \W — Representa cualquier carácter no alfanumérico.
  • \S — Representa cualquier carácter que no sea un espacio en blanco.
  • \A — Representa el inicio de la cadena. No un carácter sino una posición.
  • \Z — Representa el final de la cadena. No un carácter sino una posición.
  • \b — Marca la posición de una palabra limitada por espacios en blanco, puntuación o el inicio/final de una cadena.
  • \B — Marca la posición entre dos caracteres alfanuméricos o dos no-alfanuméricos.

Después de estos caracteres de apertura y cierre se pueden añadir modificadores que cambian la forma de interpretar la excepción:

Modificadores:
Permiten cambiar el modo en que se ejecute la expresión regular. Se agregan después del delimitador de cierre.

  • a – solo caracteres ascii
  • i – Coincidir indistintamente entre mayúsculas y minúsculas.
  • m – Match multilínea.
  • s – El metacarácter (punto) hará match también con el carácter de cambio de línea.
  • u – Hacer los matches en modo UTF8
  • x – Ignorar espacios.

 

Extraído de :

Anuncios
Categorías:Desarrollo