introducción a las expresiones regulares
DESCRIPTION
Presentación sobre expresiones regulares del primer curso de introducción a Perl de los Barcelona Perl MongersTRANSCRIPT
![Page 1: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/1.jpg)
//
Expresiones Regulares
![Page 2: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/3.jpg)
• “Regular expressions and Matching” del libro Modern Perl
• Un lenguaje dentro de un lenguaje
![Page 4: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/4.jpg)
Dos Tipos
• Matching– //– m//
• Substitution– s///
![Page 5: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/9.jpg)
Sobre modificadores
• i -> case insensitive• g -> global• e -> evaluate• …
![Page 10: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/10.jpg)
Pero ahora…
• Mi perro se llama PEPE– pepes++
• m/[Pp]epe/
Character class
![Page 11: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/11.jpg)
Character classes
• [aA]• [abc]• [aeiou]• [a-z]• [a-zA-Z]• [0-9]• [a-z-]
![Page 12: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/13.jpg)
Metacarácteres
• \W -> NO alfanumerico• \D -> NO digito• \S -> NO espacio en blanco (y tabs!)
![Page 14: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/23.jpg)
Substitution
$string = "Tengo un gato siberiano";$string =~ s/siberiano/persa/;
$string == “Tengo un gato persa”
![Page 24: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/24.jpg)
Substitution
$string = "Tengo un gato siberiano";$string =~ s/\w+/persa/;
![Page 25: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/25.jpg)
Substitution
$string = "Tengo un gato siberiano";$string =~ s/\w+/persa/;
“persa un gato siberiano”
![Page 26: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/26.jpg)
Substitution
$string = "Tengo un gato siberiano";$string =~ s/\w+/persa/g;
“persa persa persa persa” GLOBAL
![Page 27: Introducción a las Expresiones Regulares](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061211/5493a5e0ac79592f2e8b48f9/html5/thumbnails/28.jpg)