Expresiones regulares

Las Expresiones Regulares, o RegEx, son patrones que podemos usar para encontrar una determinada combinacion de caracteres dentro de un texto. Las RegEx proporcionan una manera muy flexible y poderosa de buscar o reconocer cadenas de texto para luego imprimirlas, modificarlas o cambiar su formato.

Los lenguajes de programacion mas conocidos soportan RegEx: C, Ruby, XML, Visual Basic, Unix Shell, Java, JavaScript, Python y, por supuesto, Perl.

Existen dos tipos de RegEx en el estandar POSIX: Expresiones Regulares Basicas (BRE) y Expresiones Regulares Extendidas (ERE). Luego estan las PCRE (Expresiones Regulares Compatibles con Perl, escritas en Lenguaje C e inspiradas en Perl.

Las RegEx fueron definidas en la decada del 1950 y tienen su origen en Regular Events, una notacion creada por Stephen C. Kleene, matematico estadounidense. No debemos confundir las RegEx con los comodines de Shell, ya que estos ultimos operan unicamente con los nombres de archivos.

Armado de Expresiones Regulares

Las expresiones regulares estan compuestas por

  • Caracteres ordinarios como espacio en blanco, _, A-Z, a-z, 0-9.
  • Metacaracteres de RegEx, son abreviaciones cuyo significado se expande para significar caracteres ordinarios.
Metacaracter RegEx Significado
* cero o mas iteraciones del caracter inmediato que lo precede.
. cualquier caracter ordinario, excepto el ASCII de nueva linea.
[ caracter(es) ] cualquiera de los caracteres especificados entre corchetes; puede usarse guion - para delimitar un rango de caracteres tal como [a-f], [1-5], etcetera.
^ comienzo de linea en un fichero.
$ final de una linea en un fichero.

Expresiones Regulares de busqueda por coincidencia

Coincidencia de Caracteres

. Cualquier caracter excepto Nueva Linea
\w Coincide cualquier palabra formada por caracteres (alfanumericos + _
\W Coincide cualquier no palabra formada por caracteres
\d Coincide cualquier digito (0-9)
\D Coincide cualquier no-digito.
\s Coincide cualquier caracter de espacio en blanco.
\S Coincide cualquier caracter que no sea espacio en blanco.

Anclas

^ Coincide el inicio de una cadena.
$ Coincide con el final de una cadena
\b Coincide con una palabra limite
\B Coincide con un limite que no es palabra

Cuantificadores

* Coincide 0 o mas del elemento precedente.
+ Coincide 1 o mas del elemento precedente.
? Coincide 0 o 1 del elemento precedente.
{n} Coincide exactamente n ocurrencias del elemento precedente.
{n,} Coincide n o mas ocurrencias.
{n,m} Coincide entre n y m ocurrencias.

Clases de caracteres

[abc] Coincide cualquiera de a, b o c.
[^abc] Coincide cualquier caracter, escepto abc.
[a-z] Coincide cualquier caracter de a hasta z.
[0-9] Coincide cualquier digito de 0 hasta 9.

Grupos y Rangos

(...) Captura un conjunto
(?:...) No captura un conjunto
| Captura la expresion antes o despues del cano |

Escapar expresion Regular

\ anula el significado ("escapa") un caracter o metacaracter RegEx.

Ejemplos

Ejemplos de busquedas con RegEx de Caracteres

\d{2}-\d{4}-\d{4} Coincide un numero telefonico del formato (12)-3456-7890
\w+@\w+\.\w+ Coincide una direccion de correo electronico.

Ejemplos de Busquedas con RegEx de cadenas

. Cualquier caracter excepto Nueva Linea
^$ Busca lineas vacias (realmente caracteres ASCII de "nueva linea")
/cadena/ Busca la cadena cadena
[cadena] Busca coincidencias de cualquier caracter contenido en cadena
[^cadena] Busca coincidencias de cualquier caracter no contenido en cadena
g/cadena/ Busca globalmente cadena en el documento
g/cadena1/s//cadena2/ Sustituye globalmente cadena1 por cadena2
alternativa1|alternativa2 Busca coincidencias entre alternativa1 y alternativa2
() Altera el orden de la expresion regular