52
Expresiones Regulares Jordán Pascual Espada

expresiones regulares en java

Embed Size (px)

DESCRIPTION

metacaracteres, ejemplos, evaluadores, clases en c# para expresiones regulares

Citation preview

  • 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

    Metacaracteres

    ab+ *.pdf

  • 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

    Metacaracteres

    ab+ *.pdf

  • 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

    @"(?

  • 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

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

    @"(?

  • 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

  • Ejercicios - Expresiones regulares

    Expresin regular para validar:

    Nmeros de telfono mvil

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

    Etiquetas HTML de ttulos

    Una etiqueta tag XML

    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