Está en la página 1de 4

Expresiones regulares ' para dummies' 1 ^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA1 Z]{2,6}$ Y pensars... "qu narices es esto?".

Pues bien, esto es una expresin regular. Es probable que jams hayas visto ninguna y sin embargo existe y se usa con mucha frecuencia en programas de edicin de texto, entornos de desarrollo, pginas web y en UNIX. Pero antes de continuar con ello, veamos qu entendemos por expresin regular. Sin meternos demasiado en teora sobre lenguajes regulares ni autmatas finitos vamos a definir una expresin regular (tambin llamadas regex o patrones) como una cadena de caracteres que

describe un conjunto de cadenas de caracteres sin enumerar sus elementos. Dicho de otra forma, es un patrn que genera un conjunto de palabras de un alfabeto (y este alfabeto no necesariamente se compone de letras).
En esta serie de entradas sobre expresiones regulares explicaremos las expresiones regulares de la forma ms fcil posible ilustrando con ejemplos siempre que se pueda. Pues bien, entonces... para qu vamos a querer usar una expresin regular? Supongamos que tenemos una pgina web en la que queremos poner un formulario que permita a los usuarios contactar con nosotros. Si esto fuera as, es posible que quisieramos contestar a este usuario, por lo que aadiramos un campo de texto en el que el usuario escribiera el correo donde quiere recibir la respuesta. Si bien una expresin regular no puede comprobar que los datos son verdaderos, s que puede decidir si lo que se ha escrito en el campo del e-mail tiene pinta de e-mail o no. Para poder hacer esto tenemos que saber primero qu pinta tienen las cosas que queremos validar. Pongamos un ejemplo para explicar esto: Entendemos que una direccin de correo electrnico tiene la siguiente estructura:

texto@texto.texto. Digamos que para el supuesto anterior, un usuario nos escribe en el campo de email "asdasd". Esto, lgicamente, no es un correo electrnico. Entonces querramos hacer que el usuario escribiera un correo electrnico vlido. Y hasta que no escriba algo de la pinta texto@texto.texto no vamos a darlo por vlido. Ahora bien, podramos haber aceptado una direccin de correo que fuera "foo@bar.asd". Con una expresin regular slo podremos validar que una cadena de texto tiene una estructura, pero no que lo que haya escrito exista.
Para acabar con la teora sobre las expresiones regulares, podemos usarlas como: Motor de bsqueda: buscamos una palabra en un texto (tpico Ctrl+F). Ejemplo: buscamos la palabra "byte" en la cadena "mil veinticuatro bytes son un kilobyte". Esto nos dara dos coincidencias, la primera sera en "byte", la segunda en "kilobyte". Lenguaje: utilizamos los caracteres como meta-caracteres. Es decir, no por lo que son, sino

por lo que representan. Por ejemplo, queremos encontrar todos los numeros de una cadena de texto. Usamos \d para representarun nmero cualquiera. Si ahora lo usamos para buscar en "v1d4s_c0ncurr3nt3s", ira encontrando todos los nmeros: 1, 4, 0, 3, 3. Visto esto, vamos a ver cmo construir las expresiones regulares. Las expresiones regulares tienen tres tipos de elementos: anclas, cuantificadores y conjuntos de caracteres. Anclas Se usan como delimitadores. Existen dos tipos de anclas: ^: este carcter significa comienzo de cadena. Si tuvieramos la expresin ^v encontrara la v inicial de "vidas concurrentes" pero no la v de "concurrentes vidas" $: este carcter significa final de cadena. Si tuvieramos la expresin s$ encontrara la s final de "vidas concurrentes" pero no la s de "bytes a cascoporro".

Cuantificadores Usamos los modificadores para especificar el nmero de apariciones de un elemento previo. Existen varios, pero los ms imporantes son: +: este carcter significa una o ms veces. Si tuviramos la expresin ac+ encajara con "acceso" y con "acto" pero no con "vidas" (no hay al menos una c despus de la a de vidas). *: este carcter significa ninguna o ms veces. Si tuviramos la expresin ac* encajara con "acceso", "acto" y "vidas", pero no con "perro" porque no hay una a que venga seguida (o no) de una o ms c. ?: este carcter significa como mximo una vez. Si tuviramos la expresin al?a encajara con "ala" y "Saavedra", pero no con "hallar". {n,m}: siendo n y m dos nmeros enteros positivos, significa entre n y m veces. Si omitimos

n, significa como mximo m veces, y si omitimos m significa como mnimo n veces. Si tenemos la expresin a{2,4} encajar cualquier palabra que contenga entre dos y cuatro a seguidas.
Si a cualquier cuantificador le acompaamos de un ? estaremos haciendo una bsqueda perezosa. Es decir, el mnimo nmero de apariciones. Conjuntos de caracteres Usamos los conjuntos de caracteres para encajar precisamente eso, conjuntos de caracteres: Literales: encajan consigo mismos. La expresin cata encaja en "cata", "percatarse" y en "acatarrado". . : El carcter punto significa cualquier cosa menos un salto de lnea. La expresin c.ra encaja con "cara", "encera" y "curarse". []: Usamos los corchetes para especificar una serie de caracteres de los cuales elegimos uno

solo. La expresin c[ae]ra encajar con "cara" y "encerar", pero no con "curarse". | : Usamos el carcter de pipe para especificar una serie de opciones. La expresin c(ar|ep)a encaja con "cara" y "cepa", pero no con "cera" ni "capar". - : Siempre que no se encuentre justo despus del carcter 1, se usa para especificar un rango. La expresin a-e es equivalente a [abcde]. ^: si se encuentra justo despus del carcter 1 significa todo lo que no sea lo que sigue. La expresin [^abc] significa un carcter que no sea una a, una b o una c. Incluye saltos de linea. \w: Este metacarcter significa una letra mayscula, minscula, un nmero o un _. Es equivalente a la expresin [a-zA-Z0-9_]. \W: Este metacarcter significa todo lo que no sea una letra mayscula, minscula, un

nmero o un _, incluyendo salto de linea. Es equivalente a la expresin [^a-zA-Z0-9_]. \d: significa un dgito. Es equivalente a 11-11. \D: significa todo lo que no sea un dgito. Es equivalente a [^0-9]. \s: significa un espacio, un tabulador o un salto de linea. Es equivalente a [ \t\r\n]. \S: significa todo lo que no sea un espacio, un tabulador o un salto de linea. Es equivalente a [^ \t\r\n]. \b: encaja con la posicin en la que acaba un \w y donde empieza un \W. Podemos entenderlo como comienzo y final de una palabra. \B: encaja con la posicin entre dos caracteres \w\w adems de entre dos \W\W.

Podemos usar los parntesis para agrupar elementos. Esto es interesante para referenciar grupos que queremos repetir. Para referenciar grupos usaremos \1, \2, \3... En otras entradas lo explicaremos aplicndolo a algn ejemplo concreto pero para no dejar esto sin explicar, digamos que queremos hacer un numero capicua de tres cifras. Para ello usaramos la expresin (\d)\d\1. Esto significa un nmero, otro nmero y lo mismo que haba en el primer parntesis. Adems, todos los caracteres se pueden escapar con una \ para evitar su significado especial, incluida la propia \. En otras palabras, la \ no se usa sola.

Si ahora volvemos a la expresin regular que encabezaba esta entrada, seguramente sea ms fcil de entender: ? 1 ^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$ Esta expresin tiene 7 partes: ^: hemos dicho que significa comienzo de la cadena. [a-zA-Z0-9._%-]+: esta parte significa al menos una letra minscula, mayscula, un

dgito, un punto, un _, un % o un -. Esta ser la parte del identificador del e-mail. @: el carcter @ en s mismo. [a-zA-Z0-9.-]+: esta parte significa al menos un caracter alfanumrico, un punto o un -. Lo usamos para validar el dominio de alto nivel. Y por qu aceptamos el punto? Porque un dominio es por ejemplo vidasconcurrentes.com y un subdominio sera blog.vidasconcurrentes.com. Nota: el .com no se valida en esta parte.

1. \. : el carcter punto en s mismo. Se ha escapado con la \ para quitarle el significado de cualquier caracter excepto salto de linea.
[a-zA-Z]{2,6}: esta parte se usa para validar el dominio genrico. Aceptamos mnimo dos caracteres como es, fr o uk y mximo 6 caracteres como travel o museum. $: fin de la cadena. Como ya dijimos, esto no significa que sea vlido, solo que tiene pinta de correo electrnico.

También podría gustarte