You are on page 1of 52

Expresiones Regulares

Jordn Pascual Espada

Introduccin
Expresin regular, a menudo llamada tambin patrn, es una
expresin que describe un conjunto de cadenas sin enumerar
sus elementos.

Wikipedia

Expresin regular
Conjunto de caracteres y metacaracteres que definen reglas
sintcticas para la evaluacin de una cadena de texto

ab+

*.pdf

Metacaracteres

Metacaracteres
No se representan a ellos mismos
Cada uno tiene un significado especial
Algunos de los metacaracteres mas habituales son:

$ + * - ? [ ] .

Para que sirven las expresiones regulares?


Reconocimiento y extraccin de informacin en textos
Buscar correos electrnicos y DNIs en un documento
Buscar el nmero de veces que se repiten expresiones
Etc..

Validar y analizar datos de entrada (formularios)


Formato de la de entrada
Rangos de valores y caracteres admitiditos
Longitud de la cadena

Construir cadenas de texto


Generar cadenas a partir de expresiones regulares

Para que sirven las expresiones regulares?


Analizar y modificar textos
Eliminar dobles espacios
Sustituir caracteres especficos

Especificar patrones de coincidencia (Navegador, entornos de


programacin, SO, etc.)
Definir elementos de la gramtica en un lenguaje
Muchas otras cosas

En resumen
Son un mecanismo muy potente para procesar cadenas de
caracteres

Donde se utilizan
Principalmente en:
En comandos y bsquedas dentro de los sistemas operativos

Lenguajes de programacin
Aplicaciones Software (Word, Notepad, etc)

No siempre se utilizan igual, existen diferentes estilos de


expresiones regulares, con diferentes capacidades
La mayora se basan en los mismos principios

Expresiones regulares

Algunas personas cuando se enfrentan a


un problema piensan
"Ya s, usar expresiones regulares!"

Expresiones regulares

Ahora tienen dos problemas.

Jamie Zawinski ,
Responsable del Navegador Netscape 1.1
Contribuidor de proyectos Mozilla

Expresiones regulares

^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z]
(-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?
[A-Z])$
Expresin regular
Certificado de identificacin Fisca Espaa

Ejemplos de expresiones regulares


Si queremos analizar coincidencias en una cadena.

ab
abecedario
taza
tabaco

Evaluador de expresiones regulares


La clase Regex en C#
IsMatch: Indica si la expresin regular especificada en el
constructor Regex encuentra una coincidencia en una cadena de
entrada indicada.

Matches: Busca en la cadena de entrada especificada todas las


apariciones de una expresin regular. Retorna un objeto
MatchCollection que contiene todas las coincidencias.

Evaluador de expresiones regulares


La clase Regex en C#
Match: Busca en la cadena de entrada especificada la primera aparicin
de la expresin regular indicada.

Escape/Unescape : Convierte reemplaza los metacaracteres de una


cadena por caracteres literales. Esto indica al motor de expresiones
regulares que interprete los caracteres literalmente en lugar de como
metacaracteres.

Evaluador de expresiones regulares


La clase Regex en C#
Replace: Remplaza todas las coincidencias detectadas en la cadena
entrada.
Split: Devuelve un array de cadenas, formado a partir de la divisin de
una cadena por sus coincidencias con una expresin regular.

Evaluador de expresiones regulares


Creamos un nuevo proyecto Console Application C# desde
Microsoft Visual Studio

Evaluador de expresiones regulares


Funcionalidad :
Parte de una coleccin de cadenas de texto (Array)

Define un patrn para una expresin regular Regex.IsMatch


(coincidencia)
Evala cada una de las cadenas de texto de la coleccin
Notifica si en la cadena de texto hay o no alguna coincidencia respecto
al patrn.

Evaluador de expresiones regulares


Implementacin de un evaluador de expresiones regulares

Evaluador de expresiones regulares


Implementacin de un evaluador de expresiones regulares

Expresin regular
Conjunto de caracteres y metacaracteres que definen reglas
sintcticas para la evaluacin de una de una cadena de texto

ab+

*.pdf

Metacaracteres

Representaciones de caracteres
Cualquier carcter alfa numrico
Letras y nmeros (@, #, )
Los metacaracteres especiales necesitan ser precedidos de \ por
ejemplo \. , \* , \- , \( , \), \\, \^ \$

Ejemplos:
Cadenas: {"Aplastar","Haragn","Encargado","Seleccin"}
Expresiones: a , b , e
Cadenas: { "Apla.star", "Hara.gn", "Enca*rgado", "Selec-cin" };
Expresiones: \. , \*, -

Representaciones de caracteres
Cualquier carcter alfa numrico
Letras y nmeros (@, #, )
Los caracteres que no sean letras y nmeros necesitan ser precedidos
de \ por ejemplo \. , \* , \- , \( , \)

Ejemplos:
Cadenas: {"Aplastar","Haragn","Encargado","Seleccin"}
Expresiones: a , b , e
Cadenas: { "Apla.star", "Hara.gn", "Enca*rgado", "Selec+cin" };
Expresiones: \. , \*, \+

Representaciones de caracteres
\d Representa cualquier digito de 0-9
\D Representa lo contrario a \d
Ejemplos:
Cadenas: { "122", "Perseguir", "Antena23", "Aceituna" }
Expresiones: \d , \D

Cadenas: { "a2323", "b", "Paisaje", "Diario" }


Expresiones: a\d , a\D

Representaciones de caracteres
\w Representa cualquier letra o digito (incluso letras
especiales o acentuadas como , , etc)
No comprende los espacios en blanco ni el resto de caracteres
especiales como , . @, #, $, %, C , ( , (espacio), etc
\W Representa lo contrario a \w
Ejemplos:
Cadenas: { "122", "", "#", " ", "antena23", "aceituna" };
Expresiones: \w , \W

Cadenas: { "122", "", "Firma", "Comida", "Egresados" }


Expresiones: a\w, \wa, a\W

Representaciones de caracteres
\s Representa cualquier espacio en blanco
No es buena idea utilizar los espacios para delimitar palabras,
existen otros mecanismos
\S Representa lo contrario a \s
Ejemplos:
Cadenas: { "Alrededor", "El disco", "Firma", "El examen", "Castilla la
mancha" }
Expresiones: \s , El\s

Representaciones de caracteres
Ejemplos:
Cadenas: { " 1 ", "2 ", " 3", " 4a ", " b "}
Expresiones: \s\d\s , \s4a,\s\w\s

Cadenas: { "El Gato", "El perro", "1 Gato", "1 1"};


Expresiones: \w\s\w, \d\s\D, \d\s\s\d

Otros elementos

\t Tabulador (ASCII 9)
\f Salto de pgina
\n Salto de lnea
\O Carcter nulo

Conjuntos
Elementos de los conjuntos
[ ]: inicio y fin de conjunto
- : rango dentro del conjunto
^ : negacin del conjunto

[ ] Conjuntos

[a-z] de la a la z
[A-Z] de la A a la Z
[0-9] del 0 al 9
[a-z0-9] de la a a la z y del 0 al 9
[a-z0-9_] de la a a la z y del 0 al 9 y _

Conjuntos
[ ] Conjuntos

[a-zA-Z] de la a a la z y de la A a la Z.
[opk] Cualquiera de los caracteres o, p, k,
[oe] Cualquier de los caracteres o, e
[a-e] Cualquier letra entre a y e (es decir a, b, c, e)
[^a] Que no este el carcter a
[^a-e] Que no aparezcan letras entre a y e

Ejemplos:
Cadenas: { "Cerca", "Presentar", "ensalada", "141", "Cercado13" }
Expresiones: [a-z], [0-9], [e1] , [a-e]

Conjuntos
Ejemplos:
Cadenas: { "Chicos", "Chica", "Chico", "Chimo", "Chino" };
Expresiones: Chic[oa], Chic[oa]s, Chi[a-z]o, [^0-9]

Cadenas: { "Chicos", "Chica", "Chico", "Chimo", "Chino" };


Expresiones: Chic[^a], [a-z][A-Z], [^a],[rfm]

Repeticiones
{N} significa que la expresin se repite exactamente n veces
{N, } significa la expresin se repite N o mas veces.
{X, Y} significa la expresin se repite un mnimo de X veces y un
mximo de Y.
Ejemplos:
Cadenas: { "www.Agrupar.com", "water", "windows", "Botnico"}
Expresiones: w{3} , w{1,} , w{2,3}
Cadenas: { "a1", "bb2334", "123", "b2222", "e333333" }
Expresiones: [a-z]{1,3}[0-9]{3,4}, \D{1,2}\d{4}

Repeticiones
Mximo y mnimo
Nmero de coincidencias Regex.Matches:

w -> w{1,3} -> 1 Coincidencia


ww -> w{1,3} -> 1 Coincidencia
www -> w{1,3} -> 1 Coincidencia
wwww -> w{1,3} -> 2 Coincidencias
wwwww -> w{1,3} -> 2 Coincidencias

Repeticiones
Ejemplos:
Cadenas: { "1221", "3614", "441244", "97" }
Expresiones: [12]{2,4},\d{3}4

Cadenas: { "a1", "bb2334", "123", "b2222", "e333333" }


Expresiones: [a-z]{1,3}[0-9]{3,4}, \D{1,2}\d{4}
Cadenas: { "los perros", "las ardillas", "el gato", "la rana", "el 1" }
Expresiones: [loeas]{2,3}\s[a-z]

Agrupaciones
( ) Sirven para agrupar expresiones regulares
(ab) carcter ab agrupado

Ejemplos:
Cadenas: { "Acceso", "Espeso", "El Tractor", "Cdigo fuente" }
Expresiones: (so){2}
Cadenas: { "3a3a3a a3a3", "D5D5D5D5D z1z1", "3a3a3a a3a3",
"3a3a3a a3a3a" }
Expresiones: (\d\D){3}\s{1,2}([a-z]\d){2}

Alternancia
| Representa una alternancia entre expresiones , o una o otra.
Ejemplos:
Cadenas: { "la", "el", "ellos", "las" }
Expresiones: el|la , le|a , l(e|a)
Cadenas: { "Secreto", "Barro", "Carro,Tarro", "Espiral", "B"}
Expresiones: B|Tarro, la , (B|T)arro , \D{8}|Barro

Metacaracteres
. Representa cualquier carcter
Incluido el espacio
Ejemplos:
Cadenas: { "Acceso", "Espeso", "El Tractor", "Cdigo fuente" }
Expresiones: . , A. , E.

Cadenas: { "color", "calor", "capo", "castor", "c r"};


Expresiones: c.l.r, c.{1,4}r
Cadenas: { "Osa polar", "Oso panda", "Oso pardo", "Oso gris"}
Expresiones: Os.\sp, .{3}\s[^g]

Metacaracteres
+ Significa que la expresin se repite 1 mas veces
Ejemplos:
Cadenas: { "aaaa", "soso", "patoso", "Cdigo fuente" }
Expresiones: (so)+, a+ , o+
Cadenas: { "tejer", "el mapa5", "140suerte", "e 50" };
Expresiones: (\d+\D+|\D+\d+) , \w+\s+\d+
Cadenas:{ koala", "collllor,", "El color", "El collar" };
Expresiones: col+[oa]r , [ck]ol+[oa]r ,

Metacaracteres
* Significa que se repite 0 o mas veces
Ejemplos:
Cadenas: { "aaaa", "soso", "patoso", 213213" }
Expresiones: w*, [a-z]*, [1-9]*
Cadenas: { #cinco5555#", #seis66666#", #cuatro4444#", #dos22#" };
Expresiones: #(cinco|seis)[56]*# , #[a-z]{4,5}\d*#
Cadenas: { "int a =3;", "int a=345;", "float a = 4.5;", "bit b = 0;"};
Expresiones: [a-z]*\s+\D*\s*=\s*[\d\.]*;

Metacaracteres
? Significa que se repite 0 o 1 vez
Ejemplos:
Cadenas: { "Ha", "Ha cantado", "a","Hab", "Hablabla" }
Expresiones: Ha(bla)?, [a-z]?, [1-9]?
Cadenas: { "Apila", "pila", "Atar;", "Atracar", "reloj" };
Expresiones: A?[a-z]+[ra] ,

Delimitadores
\b Significa que coincide si es un limite de palabra
(se suele incluir al principio y/o al final de las expresiones)
Se utiliza para buscar palabras
Las palabras no solo estn delimitadas por espacios, tambin
pueden estarlo por otro tipo de caracteres

;
:
.
,
=

Delimitadores
Ejemplos:
Cadenas: { "Hola", "ola", "La ola", "Pola", "olaola"};
Expresiones: \bola, \bola\b

Cadenas: { "hola hola ", "hola Juan", "colegio", "Escalera" }


Expresiones: (\bhola\b){2} , o\b , \b[A-Z]\w*[na]\b , \b[^E]
Cadenas: { "Sol", "Las Espaldas", "El Almuerzo", "El Oro" };
Expresiones: \b[a-zA-Z]{7,8}\b , \b.{3,6}o\b
Cadenas: { "uno,dos", "Fin.Continua", "Uno=1", "Son:1,2,3" }
Expresiones: \b[Uu]no\b , \bCon.*\b , (\b[1-3]\b\,?){3}

Delimitadores
\B Significa que coincide si no es un limite de palabra
Ejemplos:
Cadenas: { "Hola", "ola", "La ola", "Pola", "olaola"};
Expresiones: \Bola, \Bola\b
Cadenas: { "Diseo", "El Diseo", "Diseador", "Pases" };
Expresiones: \Bo\B ,

Delimitadores
^ Significa que la coincidencia se debe producir al inicio de la
cadena (No confundir cadena con palabra)
Las validaciones web utilizan comnmente este tipo de
delimitadores de cadena, tanto el de inicio como el de final.
Tambin podra ser al principio de la lnea si se trabaja con
RegexOptions.Multiline
Regex.Match(input, pattern, RegexOptions.Multiline);

Ejemplos:
Cadenas: { "refrigerador1", "do1 re1 mi1", "r", "1Alacrn", "Sur1" }
Expresiones: ^r, ^[rS]\w+1, ^\D

Delimitadores
\A Significa que la coincidencia se debe producir al inicio de la
cadena (Sin posibilidad de varias lneas)
Ejemplos:
Cadenas: { "refrigerador1", "do1 re1 mi1", "r", "1Alacrn", "Sur1" }
Expresiones: \Ar, \A[rS]\w+1, \A\D

Delimitadores
$ Significa que la coincidencia se debe producir al final de la
cadena o lnea
Tambin podra ser al principio de la lnea si se trabaja con
RegexOptions.Multiline
Regex.Match(input, pattern, RegexOptions.Multiline);

Ejemplos:
Cadenas: { "La bandera roja", "La bandeja azul", "El bar nuevo" };
Expresiones: bar$ , ^[A-Z].+[ao]$

Delimitadores
\Z Significa que la coincidencia se debe producir al final de la
cadena (o antes de un salto de lnea)
\z Significa que la coincidencia se debe producir al final de la

cadena (Sin posibilidad de varias lneas)

Ejemplos:
Cadenas: { "La bandera roja", "La bandeja azul", "El bar nuevo" };
Expresiones: bar\> , ^[A-Z].+[ao]\Z

Look Around Mirar al rededor


Split de una cadena a partir de una expresin regular

@ "[#@] "
encuentra #@ captura la posicin y suprime el carcter
@"(?=[#@])" Positive Lookahead
encuentra #@ captura la posicin que lo precede
@"(?<=[#@])" Positive Lookbehind
encuentra #@ captura la posicin que le sigue

o#dos
o#dos

Look Around Mirar al rededor


Split de una cadena a partir de una expresin regular

@ \d "
encuentra el digito y captura la posicin y suprime el carcter

aA123

@"(?!\d)" Negative Lookahead


encuentra cada no coincidencia con el digito y captura la posicin que lo
precede

aA123

@"(?<!\d)" Negative Lookbehind


encuentra cada no coincidencia con digito y captura la posicin que le
sigue

Ejercicios - Expresiones regulares


Expresin regular para validar:
Claves
6JKV-QPB8-RQ89-FW7T-PBJ7
T32RWFDMGFD2QGMH3P9G
GG4M.MGK7.HVXF.KHCF.KW6K
DNIs en varios formatos
55349061K, 74348275-Q, 19290989s
Palabras entre corchetes
[fuerza]

Comentarios en HTML
<!-- Mi comentario HTML-->

Ejercicios - Expresiones regulares


Expresin regular para validar:
Nmeros de telfono mvil
652881432 , +34652881432, 652 88 14 32, 652 881 432
Etiquetas HTML de ttulos
<h1></h1> <H1></H1> <h2></h2> <H2></H2>

Una etiqueta tag XML


<tag><tag>
Cualquier numero decimal
-0.9 9,32 -2 .11

Validacin de expresiones regulares online

http://www.rexv.org/
http://regexpal.com/
http://www.regexplanet.com/advanced/java/index.html
http://www.metriplica.com/es/recursos/expresiones-regulares
http://www.regular-expressions.info/javascriptexample.html
http://www.regextester.com/

Referencias y enlaces de inters

Tutorial Expresiones regulares


http://www.regular-expressions.info/tutorial.html

Gua de expresiones regulares Mozilla


https://developer.mozilla.org/es/docs/Gu%C3%ADa_JavaScript_1.5/Expresiones_Regulares

La clase Regex .NET Framework


http://msdn.microsoft.com/es-es/library/system.text.regularexpressions.regex.aspx