introducción a las expresiones regulares

28
// Expresiones Regulares

Upload: jose-luis-martinez

Post on 18-Dec-2014

2.688 views

Category:

Documents


0 download

DESCRIPTION

Presentación sobre expresiones regulares del primer curso de introducción a Perl de los Barcelona Perl Mongers

TRANSCRIPT

Page 1: Introducción a las Expresiones Regulares

//

Expresiones Regulares

Page 2: Introducción a las Expresiones Regulares

Que es una expresión regular?

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

• Larry Wall decidió incorporar expresiones regulares como parte de Perl

Page 3: Introducción a las Expresiones Regulares

• “Regular expressions and Matching” del libro Modern Perl

• Un lenguaje dentro de un lenguaje

Page 4: Introducción a las Expresiones Regulares

Dos Tipos

• Matching– //– m//

• Substitution– s///

Page 5: Introducción a las Expresiones Regulares

Matching

my $string = ‘Mi perro se llama Pepe’;if ($string =~ m/perro/) { $perros ++;}if ($string =~ m/pepe/) { $pepes ++;}

Page 6: Introducción a las Expresiones Regulares

Matching

my $string = ‘Mi perro se llama Pepe’;if ($string =~ m/perro/) { $perros ++;}if ($string =~ m/pepe/) { $pepes ++;}

Page 7: Introducción a las Expresiones Regulares

Matching

my $string = ‘Mi perro se llama Pepe’;if ($string =~ m/perro/) { $perros ++;}if ($string =~ m/pepe/) { $pepes ++;}

Page 8: Introducción a las Expresiones Regulares

my $string = ‘Mi perro se llama Pepe’;if ($string =~ m/perro/) { $perros ++;}if ($string =~ m/pepe/i) { $pepes ++;}

Las regexp son “case sensitive”

Modificador

Page 9: Introducción a las Expresiones Regulares

Sobre modificadores

• i -> case insensitive• g -> global• e -> evaluate• …

Page 10: Introducción a las Expresiones Regulares

Pero ahora…

• Mi perro se llama PEPE– pepes++

• m/[Pp]epe/

Character class

Page 11: Introducción a las Expresiones Regulares

Character classes

• [aA]• [abc]• [aeiou]• [a-z]• [a-zA-Z]• [0-9]• [a-z-]

Page 12: Introducción a las Expresiones Regulares

Metacarácteres

• \w -> alfanumérico• \d -> digito• \s -> espacio en blanco (y tabs!)• . -> Cualquier carácter (menos un salto de

linea)

• \b -> Word boundary (cambio entre \w y \W)

Page 13: Introducción a las Expresiones Regulares

Metacarácteres

• \W -> NO alfanumerico• \D -> NO digito• \S -> NO espacio en blanco (y tabs!)

Page 14: Introducción a las Expresiones Regulares

my $string = ‘Mi perro se llama Pepe’;if ($string =~ m/^se llama \w$/i) {

}

Usando las clases

Page 15: Introducción a las Expresiones Regulares

my $string = ‘Mi perro se llama Z’;if ($string =~ m/^se llama \w$/i) {

}

Usando las clases

Page 16: Introducción a las Expresiones Regulares

my $string = ‘Mi perro se llama Pepe’;if ($string =~ m/^se llama \w+$/i) {

}

Usando las clases

Cuantificador

Page 17: Introducción a las Expresiones Regulares

Cuantificadores• ? -> 0 o 1

– /ca?t/• ct• cat• caaat

• + -> 1 o más– /ba+/

• ba• baa• Bb

• * -> 0 o más– /ba*/

• ba• baa• Bb

• {N,M}– /a{3,4}/

• baa• baaa• baaaa• baaaaa

Page 18: Introducción a las Expresiones Regulares

Un breve inciso: Escapando

• Quiero escribir una expresión regular que reconozca la cadena “{1,3}”

• print "Reconocido" if ("{1,3}" =~ m/{1,3}/);– Syntax error

• print "Reconocido" if ("{1,3}" =~ m/\{1,3\}/);

Page 19: Introducción a las Expresiones Regulares

Capturando datos

• Los paréntesis capturan datos– ()– Rellenan las variables $1, $2, …, $9

• Capturas con nombre– (?<nombre>…)– Rellena la variable $+{nombre}

Page 20: Introducción a las Expresiones Regulares

Capturas

my @phrases = ( ‘Mi perro se llama pepe’, ‘Mi gato se llama Garfield‘);my %tipos, %nombres;foreach my $phrase (@phrases) {

if ($phrase =~ m/Mi (\w+) se llama (\w+)/){ my ($tipo, $nombre) = ($1, $2); $tipos{ $tipo } ++; $nombres{ $nombre }++; }}

Page 21: Introducción a las Expresiones Regulares

Capturas II

my ($tipo, $nombre) = ($phrase =~ m/Mi (\w+) se llama (\w+)/);

$string = "Tengo un gato siberiano y un perro pastor";while ($string =~ m/(?|perro|gato) (\w+)/g){ print "Animal: $1\n";}

No captura!(?| )

Global

Page 22: Introducción a las Expresiones Regulares

Greedyness

• + y * son “greedy” (avariciosos)– Intentan consumir el máximo de caracteres

posibles

• "Tengo un gato siberiano“ =~ m/Tengo un (.*o)/;– $1 == ‘gato siberiano’

• "Tengo un gato siberiano“ =~ m/Tengo un (.*?o)/;– $1 == ‘gato’

Page 23: Introducción a las Expresiones Regulares

Substitution

$string = "Tengo un gato siberiano";$string =~ s/siberiano/persa/;

$string == “Tengo un gato persa”

Page 24: Introducción a las Expresiones Regulares

Substitution

$string = "Tengo un gato siberiano";$string =~ s/\w+/persa/;

Page 25: Introducción a las Expresiones Regulares

Substitution

$string = "Tengo un gato siberiano";$string =~ s/\w+/persa/;

“persa un gato siberiano”

Page 26: Introducción a las Expresiones Regulares

Substitution

$string = "Tengo un gato siberiano";$string =~ s/\w+/persa/g;

“persa persa persa persa” GLOBAL

Page 27: Introducción a las Expresiones Regulares

Substitution on steroids

$string = "Tengo un gato siberiano";$string =~ s/\w+/ pluraliza($1) /ge;

$string == “Tenemos unos gatos siberianos”

Código Perl!

Page 28: Introducción a las Expresiones Regulares