Expresiones regulares

52
Expresiones Regulares Jordán Pascual Espada

description

Transparencias Clase de Expresiones Regulares Expresión regular, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos.

Transcript of Expresiones regulares

Page 1: Expresiones regulares

Expresiones Regulares

Jordán Pascual Espada

Page 2: Expresiones regulares

Introducción

Expresión regular, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos.

Wikipedia

Page 3: Expresiones regulares

Expresión regular

Conjunto de caracteres y metacaracteres que definen reglas sintácticas para la evaluación de una cadena de texto

Metacaracteres

ab+ *.pdf

Page 4: Expresiones regulares

Metacaracteres

No se representan a ellos mismos

Cada uno tiene un significado especial

Algunos de los metacaracteres mas habituales son:

$ + * - ? [ ] .

Page 5: Expresiones regulares

¿Para que sirven las expresiones regulares?

Reconocimiento y extracción de información en textos Buscar correos electrónicos y DNIs en un documento

Buscar el número 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

Page 6: Expresiones regulares

¿Para que sirven las expresiones regulares?

Analizar y modificar textos Eliminar dobles espacios

Sustituir caracteres específicos

Especificar patrones de coincidencia (Navegador, entornos de programación, SO, etc.)

Definir elementos de la gramática en un lenguaje

Muchas otras cosas…

Page 7: Expresiones regulares

En resumen

Son un mecanismo muy potente para procesar cadenas de caracteres

Page 8: Expresiones regulares

Donde se utilizan

Principalmente en:

En comandos y búsquedas dentro de los sistemas operativos

Lenguajes de programación

Aplicaciones Software (Word, Notepad, etc)

No siempre se utilizan igual, existen diferentes estilos de expresiones regulares, con diferentes capacidades

La mayoría se basan en los mismos principios

Page 9: Expresiones regulares

Expresiones regulares

Algunas personas cuando se enfrentan a

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

Page 10: Expresiones regulares

Expresiones regulares

Ahora tienen dos problemas.

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

Page 11: Expresiones regulares

Expresiones regulares

^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z] (-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?

[A-Z])$

Expresión regular Certificado de identificación Fisca España

Page 12: Expresiones regulares

Ejemplos de expresiones regulares

Si queremos analizar coincidencias en una cadena.

ab

abecedario taza tabaco

Page 13: Expresiones regulares

Evaluador de expresiones regulares

La clase Regex en C#

IsMatch: Indica si la expresión 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 expresión regular. Retorna un objeto MatchCollection que contiene todas las coincidencias.

Page 14: Expresiones regulares

Evaluador de expresiones regulares

La clase Regex en C#

Match: Busca en la cadena de entrada especificada la primera aparición de la expresión 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.

Page 15: Expresiones regulares

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 división de una cadena por sus coincidencias con una expresión regular.

Page 16: Expresiones regulares

Evaluador de expresiones regulares

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

Page 17: Expresiones regulares

Evaluador de expresiones regulares

Funcionalidad :

Parte de una colección de cadenas de texto (Array)

Define un patrón para una expresión regular Regex.IsMatch (coincidencia)

Evalúa cada una de las cadenas de texto de la colección

Notifica si en la cadena de texto hay o no alguna coincidencia respecto al patrón.

Page 18: Expresiones regulares

Evaluador de expresiones regulares

Implementación de un evaluador de expresiones regulares

Page 19: Expresiones regulares

Evaluador de expresiones regulares

Implementación de un evaluador de expresiones regulares

Page 20: Expresiones regulares

Expresión regular

Conjunto de caracteres y metacaracteres que definen reglas sintácticas para la evaluación de una de una cadena de texto

Metacaracteres

ab+ *.pdf

Page 21: Expresiones regulares

Representaciones de caracteres

Cualquier carácter alfa numérico Letras y números (@, #, …)

Los metacaracteres especiales necesitan ser precedidos de \ por ejemplo \. , \* , \- , \( , \), \\, \^ \$

Ejemplos: Cadenas: {"Aplastar","Haragán","Encargado","Selección"}

Expresiones: a , b , e

Cadenas: { "Apla.star", "Hara.gán", "Enca*rgado", "Selec-ción" };

Expresiones: \. , \*, -

Page 22: Expresiones regulares

Representaciones de caracteres

Cualquier carácter alfa numérico Letras y números (@, #, …)

Los caracteres que no sean letras y números necesitan ser precedidos de \ por ejemplo \. , \* , \- , \( , \)

Ejemplos: Cadenas: {"Aplastar","Haragán","Encargado","Selección"}

Expresiones: a , b , e

Cadenas: { "Apla.star", "Hara.gán", "Enca*rgado", "Selec+ción" };

Expresiones: \. , \*, \+

Page 23: Expresiones regulares

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

Page 24: Expresiones regulares

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

Page 25: Expresiones regulares

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

Page 26: Expresiones regulares

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

Page 27: Expresiones regulares

Otros elementos

\t Tabulador (ASCII 9)

\f Salto de página

\n Salto de línea

\O Carácter nulo

Page 28: Expresiones regulares

Conjuntos

Elementos de los conjuntos [ ]: inicio y fin de conjunto

- : rango dentro del conjunto

^ : negación 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 _

Page 29: Expresiones regulares

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 carácter 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]

Page 30: Expresiones regulares

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]

Page 31: Expresiones regulares

Repeticiones

{N} significa que la expresión se repite exactamente n veces

{N, } significa la expresión se repite N o mas veces.

{X, Y} significa la expresión se repite un mínimo de X veces y un máximo de Y.

Ejemplos: Cadenas: { "www.Agrupar.com", "water", "windows", "Botánico"}

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}

Page 32: Expresiones regulares

Repeticiones

Máximo y mínimo

Número 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

Page 33: Expresiones regulares

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]

Page 34: Expresiones regulares

Agrupaciones

( ) Sirven para agrupar expresiones regulares (ab) carácter ab agrupado

Ejemplos: Cadenas: { "Acceso", "Espeso", "El Tractor", "Código fuente" }

Expresiones: (so){2}

Cadenas: { "3a3a3a a3a3", "D5D5D5D5D z1z1", "3a3a3a a3a3", "3a3a3a a3a3a" }

Expresiones: (\d\D){3}\s{1,2}([a-z]\d){2}

Page 35: Expresiones regulares

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

Page 36: Expresiones regulares

Metacaracteres

. Representa cualquier carácter Incluido el espacio

Ejemplos: Cadenas: { "Acceso", "Espeso", "El Tractor", "Código 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]

Page 37: Expresiones regulares

Metacaracteres

+ Significa que la expresión se repite 1 mas veces

Ejemplos: Cadenas: { "aaaa", "soso", "patoso", "Código 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 ,

Page 38: Expresiones regulares

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\.]*;

Page 39: Expresiones regulares

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] ,

Page 40: Expresiones regulares

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 están delimitadas por espacios, también pueden estarlo por otro tipo de caracteres ;

:

.

,

=

Page 41: Expresiones regulares

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}

Page 42: Expresiones regulares

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: { "Diseño", "El Diseño", "Diseñador", "Países" };

Expresiones: \Bo\B ,

Page 43: Expresiones regulares

Delimitadores

^ Significa que la coincidencia se debe producir al inicio de la cadena (No confundir cadena con palabra)

Las validaciones web utilizan comúnmente este tipo de delimitadores de cadena, tanto el de inicio como el de final.

También podría ser al principio de la línea si se trabaja con RegexOptions.Multiline Regex.Match(input, pattern, RegexOptions.Multiline);

Ejemplos: Cadenas: { "refrigerador1", "do1 re1 mi1", "r", "1Alacrán", "Sur1" }

Expresiones: ^r, ^[rS]\w+1, ^\D

Page 44: Expresiones regulares

Delimitadores

\A Significa que la coincidencia se debe producir al inicio de la cadena (Sin posibilidad de varias líneas)

Ejemplos: Cadenas: { "refrigerador1", "do1 re1 mi1", "r", "1Alacrán", "Sur1" }

Expresiones: \Ar, \A[rS]\w+1, \A\D

Page 45: Expresiones regulares

Delimitadores

$ Significa que la coincidencia se debe producir al final de la cadena o línea

También podría ser al principio de la línea 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]$

Page 46: Expresiones regulares

Delimitadores

\Z Significa que la coincidencia se debe producir al final de la cadena (o antes de un salto de línea)

\z Significa que la coincidencia se debe producir al final de la cadena (Sin posibilidad de varias líneas)

Ejemplos: Cadenas: { "La bandera roja", "La bandeja azul", "El bar nuevo" };

Expresiones: bar\> , ^[A-Z].+[ao]\Z

Page 47: Expresiones regulares

Look Around “Mirar al rededor”

Split de una cadena a partir de una expresión regular

@ "[#@] "

encuentra #@ captura la posición y suprime el carácter

@"(?=[#@])" Positive Lookahead encuentra #@ captura la posición que lo precede

@"(?<=[#@])" Positive Lookbehind encuentra #@ captura la posición que le sigue

o#dos

o#dos

Page 48: Expresiones regulares

Look Around “Mirar al rededor”

Split de una cadena a partir de una expresión regular

@ “\d "

encuentra el digito y captura la posición y suprime el carácter

@"(?!\d)" Negative Lookahead encuentra cada no coincidencia con el digito y captura la posición que lo precede

@"(?<!\d)" Negative Lookbehind encuentra cada no coincidencia con digito y captura la posición que le sigue

aA123

aA123

Page 49: Expresiones regulares

Ejercicios - Expresiones regulares

Expresión 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-->

Page 50: Expresiones regulares

Ejercicios - Expresiones regulares

Expresión regular para validar:

Números de teléfono móvil

652881432 , +34652881432, 652 88 14 32, 652 881 432

Etiquetas HTML de títulos

<h1>…</h1> <H1>…</H1> <h2>…</h2> <H2>…</H2>

Una etiqueta ‘tag’ XML

<tag>…<tag>

Cualquier numero decimal

-0.9 9,32 -2 .11

Page 52: Expresiones regulares

Referencias y enlaces de interés

Tutorial Expresiones regulares http://www.regular-expressions.info/tutorial.html

Guía 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