SlideShare a Scribd company logo
1 of 28
//

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
• “Regular expressions and Matching” del libro
  Modern Perl

• Un lenguaje dentro de un lenguaje
Dos Tipos
• Matching
  – //
  – m//
• Substitution
  – s///
Matching
my $string = ‘Mi perro se llama Pepe’;
if ($string =~ m/perro/) {
  $perros ++;
}
if ($string =~ m/pepe/) {
  $pepes ++;
}
Matching
my $string = ‘Mi perro se llama Pepe’;
if ($string =~ m/perro/) {
  $perros ++;
}
if ($string =~ m/pepe/) {
  $pepes ++;
}
Matching
my $string = ‘Mi perro se llama Pepe’;
if ($string =~ m/perro/) {
  $perros ++;
}
if ($string =~ m/pepe/) {
  $pepes ++;
}
Las regexp son “case sensitive”

my $string = ‘Mi perro se llama Pepe’;
if ($string =~ m/perro/) {
                              Modificador
  $perros ++;
}
if ($string =~ m/pepe/i) {
  $pepes ++;
}
Sobre modificadores
•   i -> case insensitive
•   g -> global
•   e -> evaluate
•   …
Pero ahora…
• Mi perro se llama PEPE
  – pepes++
• m/[Pp]epe/




           Character class
Character classes
•   [aA]
•   [abc]
•   [aeiou]
•   [a-z]
•   [a-zA-Z]
•   [0-9]
•   [a-z-]
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)
Metacarácteres
• W -> NO alfanumerico
• D -> NO digito
• S -> NO espacio en blanco (y tabs!)
Usando las clases

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

}
Usando las clases

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

}
Usando las clases

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

}

                            Cuantificador
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
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}/);
Capturando datos
• Los paréntesis capturan datos
  – ()
  – Rellenan las variables $1, $2, …, $9


• Capturas con nombre
  – (?<nombre>…)
  – Rellena la variable $+{nombre}
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 }++;
   }
}
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: $1n";
}
                                 No captura!       Global
                                 (?| )
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’
Substitution
$string = "Tengo un gato siberiano";
$string =~ s/siberiano/persa/;

$string == “Tengo un gato persa”
Substitution
$string = "Tengo un gato siberiano";
$string =~ s/w+/persa/;
Substitution
$string = "Tengo un gato siberiano";
$string =~ s/w+/persa/;

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

“persa persa persa persa”      GLOBAL
Substitution on steroids
$string = "Tengo un gato siberiano";
$string =~ s/w+/ pluraliza($1) /ge;


                       Código Perl!



$string == “Tenemos unos gatos siberianos”
Introducción a las Expresiones Regulares

More Related Content

Viewers also liked

Tema 11 expresiones regulares en java por gio
Tema 11   expresiones regulares en java por gioTema 11   expresiones regulares en java por gio
Tema 11 expresiones regulares en java por gio
Robert Wolf
 
Reciclado de aluminio
Reciclado de aluminioReciclado de aluminio
Reciclado de aluminio
GioOovis
 
RECICLAJE DEL ALUMINIO
RECICLAJE  DEL ALUMINIORECICLAJE  DEL ALUMINIO
RECICLAJE DEL ALUMINIO
guest900a21
 
Presentación Autómatas Finito No Deterministico
Presentación  Autómatas Finito No DeterministicoPresentación  Autómatas Finito No Deterministico
Presentación Autómatas Finito No Deterministico
Scarlinr
 
Expresiones regulares y gramáticas
Expresiones regulares y gramáticasExpresiones regulares y gramáticas
Expresiones regulares y gramáticas
Juanchi Novas
 
Clase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito deterministaClase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito determinista
mvagila
 

Viewers also liked (17)

Expresiones regulares
Expresiones regularesExpresiones regulares
Expresiones regulares
 
Tema 11 expresiones regulares en java por gio
Tema 11   expresiones regulares en java por gioTema 11   expresiones regulares en java por gio
Tema 11 expresiones regulares en java por gio
 
Ciclos del agua nitrogeno-carbono
Ciclos del agua nitrogeno-carbonoCiclos del agua nitrogeno-carbono
Ciclos del agua nitrogeno-carbono
 
Ciclo del carbono
Ciclo del carbonoCiclo del carbono
Ciclo del carbono
 
Encuadre Lenguajes Formales y Teoría de Autómatas
Encuadre Lenguajes Formales y Teoría de AutómatasEncuadre Lenguajes Formales y Teoría de Autómatas
Encuadre Lenguajes Formales y Teoría de Autómatas
 
Expresiones regulares
Expresiones regularesExpresiones regulares
Expresiones regulares
 
Laboratorio # 1
Laboratorio # 1Laboratorio # 1
Laboratorio # 1
 
Sentencias de control
Sentencias de controlSentencias de control
Sentencias de control
 
Reciclado de aluminio
Reciclado de aluminioReciclado de aluminio
Reciclado de aluminio
 
RECICLAJE DEL ALUMINIO
RECICLAJE  DEL ALUMINIORECICLAJE  DEL ALUMINIO
RECICLAJE DEL ALUMINIO
 
Lenguajes Regulares y Autómatas Finitos - Clase 7
Lenguajes Regulares y Autómatas Finitos - Clase 7Lenguajes Regulares y Autómatas Finitos - Clase 7
Lenguajes Regulares y Autómatas Finitos - Clase 7
 
Presentación Autómatas Finito No Deterministico
Presentación  Autómatas Finito No DeterministicoPresentación  Autómatas Finito No Deterministico
Presentación Autómatas Finito No Deterministico
 
Lenguajes Regulares.
Lenguajes Regulares.Lenguajes Regulares.
Lenguajes Regulares.
 
Reciclaje de Aluminio
Reciclaje de AluminioReciclaje de Aluminio
Reciclaje de Aluminio
 
Automatas finitos
Automatas finitosAutomatas finitos
Automatas finitos
 
Expresiones regulares y gramáticas
Expresiones regulares y gramáticasExpresiones regulares y gramáticas
Expresiones regulares y gramáticas
 
Clase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito deterministaClase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito determinista
 

More from Jose Luis Martínez

More from Jose Luis Martínez (17)

Being cloudy with perl
Being cloudy with perlBeing cloudy with perl
Being cloudy with perl
 
Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)Modern Perl toolchain (help building microservices)
Modern Perl toolchain (help building microservices)
 
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
MooseX::Datamodel - Barcelona Perl Workshop Lightning talkMooseX::Datamodel - Barcelona Perl Workshop Lightning talk
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
 
Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015Paws - Perl AWS SDK Update - November 2015
Paws - Perl AWS SDK Update - November 2015
 
Paws - A Perl AWS SDK
Paws - A Perl AWS SDKPaws - A Perl AWS SDK
Paws - A Perl AWS SDK
 
Boosting MySQL (for starters)
Boosting MySQL (for starters)Boosting MySQL (for starters)
Boosting MySQL (for starters)
 
Plenv and carton
Plenv and cartonPlenv and carton
Plenv and carton
 
Building an aws sdk for Perl - Granada Perl Workshop 2014
Building an aws sdk for Perl - Granada Perl Workshop 2014Building an aws sdk for Perl - Granada Perl Workshop 2014
Building an aws sdk for Perl - Granada Perl Workshop 2014
 
Writing plugins for Nagios and Opsview - CAPSiDE Tech Talks
Writing plugins for Nagios and Opsview - CAPSiDE Tech TalksWriting plugins for Nagios and Opsview - CAPSiDE Tech Talks
Writing plugins for Nagios and Opsview - CAPSiDE Tech Talks
 
Escribir plugins para Nagios en Perl
Escribir plugins para Nagios en PerlEscribir plugins para Nagios en Perl
Escribir plugins para Nagios en Perl
 
NRD: Nagios Result Distributor
NRD: Nagios Result DistributorNRD: Nagios Result Distributor
NRD: Nagios Result Distributor
 
Perl and AWS
Perl and AWSPerl and AWS
Perl and AWS
 
Writing nagios plugins in perl
Writing nagios plugins in perlWriting nagios plugins in perl
Writing nagios plugins in perl
 
Ficheros y directorios
Ficheros y directoriosFicheros y directorios
Ficheros y directorios
 
DBIx::Class
DBIx::ClassDBIx::Class
DBIx::Class
 
DBI
DBIDBI
DBI
 
The modern perl toolchain
The modern perl toolchainThe modern perl toolchain
The modern perl toolchain
 

Introducción a las Expresiones Regulares

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