Introducción a las Expresiones Regulares

4,105 views

Published on

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

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,105
On SlideShare
0
From Embeds
0
Number of Embeds
2,940
Actions
Shares
0
Downloads
36
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introducción a las Expresiones Regulares

  1. 1. //Expresiones Regulares
  2. 2. 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
  3. 3. • “Regular expressions and Matching” del libro Modern Perl• Un lenguaje dentro de un lenguaje
  4. 4. Dos Tipos• Matching – // – m//• Substitution – s///
  5. 5. Matchingmy $string = ‘Mi perro se llama Pepe’;if ($string =~ m/perro/) { $perros ++;}if ($string =~ m/pepe/) { $pepes ++;}
  6. 6. Matchingmy $string = ‘Mi perro se llama Pepe’;if ($string =~ m/perro/) { $perros ++;}if ($string =~ m/pepe/) { $pepes ++;}
  7. 7. Matchingmy $string = ‘Mi perro se llama Pepe’;if ($string =~ m/perro/) { $perros ++;}if ($string =~ m/pepe/) { $pepes ++;}
  8. 8. Las regexp son “case sensitive”my $string = ‘Mi perro se llama Pepe’;if ($string =~ m/perro/) { Modificador $perros ++;}if ($string =~ m/pepe/i) { $pepes ++;}
  9. 9. Sobre modificadores• i -> case insensitive• g -> global• e -> evaluate• …
  10. 10. Pero ahora…• Mi perro se llama PEPE – pepes++• m/[Pp]epe/ Character class
  11. 11. Character classes• [aA]• [abc]• [aeiou]• [a-z]• [a-zA-Z]• [0-9]• [a-z-]
  12. 12. 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)
  13. 13. Metacarácteres• W -> NO alfanumerico• D -> NO digito• S -> NO espacio en blanco (y tabs!)
  14. 14. Usando las clasesmy $string = ‘Mi perro se llama Pepe’;if ($string =~ m/^se llama w$/i) {}
  15. 15. Usando las clasesmy $string = ‘Mi perro se llama Z’;if ($string =~ m/^se llama w$/i) {}
  16. 16. Usando las clasesmy $string = ‘Mi perro se llama Pepe’;if ($string =~ m/^se llama w+$/i) {} Cuantificador
  17. 17. 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
  18. 18. 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}/);
  19. 19. Capturando datos• Los paréntesis capturan datos – () – Rellenan las variables $1, $2, …, $9• Capturas con nombre – (?<nombre>…) – Rellena la variable $+{nombre}
  20. 20. Capturasmy @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 }++; }}
  21. 21. Capturas IImy ($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: $1n";} No captura! Global (?| )
  22. 22. 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’
  23. 23. Substitution$string = "Tengo un gato siberiano";$string =~ s/siberiano/persa/;$string == “Tengo un gato persa”
  24. 24. Substitution$string = "Tengo un gato siberiano";$string =~ s/w+/persa/;
  25. 25. Substitution$string = "Tengo un gato siberiano";$string =~ s/w+/persa/;“persa un gato siberiano”
  26. 26. Substitution$string = "Tengo un gato siberiano";$string =~ s/w+/persa/g;“persa persa persa persa” GLOBAL
  27. 27. Substitution on steroids$string = "Tengo un gato siberiano";$string =~ s/w+/ pluraliza($1) /ge; Código Perl!$string == “Tenemos unos gatos siberianos”

×