Las expresiones regulares (regex) son una herramienta poderosa para la manipulación y búsqueda de texto. En Perl, las expresiones regulares son una parte integral del lenguaje y se utilizan ampliamente. En este módulo, exploraremos conceptos avanzados de expresiones regulares que te permitirán realizar búsquedas y manipulaciones de texto más complejas y eficientes.
Contenido
Revisión de Conceptos Básicos
Antes de adentrarnos en los conceptos avanzados, repasemos algunos conceptos básicos de las expresiones regulares en Perl:
- Metacaracteres:
.
(cualquier carácter),*
(cero o más),+
(uno o más),?
(cero o uno),^
(inicio de línea),$
(fin de línea). - Clases de caracteres:
[abc]
(cualquiera de a, b, c),\d
(dígito),\w
(carácter de palabra),\s
(espacio en blanco). - Grupos y Alternativas:
(abc)
(grupo),a|b
(alternativa).
Grupos de Captura y No Captura
Grupos de Captura
Los grupos de captura permiten capturar partes de la cadena que coinciden con la expresión regular. Estos grupos se pueden referenciar posteriormente.
my $text = "Perl is powerful"; if ($text =~ /(Perl) is (powerful)/) { print "First word: $1\n"; # Imprime "First word: Perl" print "Second word: $2\n"; # Imprime "Second word: powerful" }
Grupos de No Captura
A veces, solo queremos agrupar partes de la expresión sin capturarlas. Para esto, usamos (?:...)
.
my $text = "Perl is powerful"; if ($text =~ /(?:Perl) is (powerful)/) { print "Captured word: $1\n"; # Imprime "Captured word: powerful" }
Lookahead y Lookbehind
Lookahead
El lookahead permite hacer coincidir una secuencia solo si es seguida por otra secuencia específica, sin incluirla en la coincidencia.
my $text = "Perl is powerful"; if ($text =~ /Perl(?= is powerful)/) { print "Found 'Perl' followed by 'is powerful'\n"; }
Lookbehind
El lookbehind es similar al lookahead, pero verifica lo que precede a la secuencia.
my $text = "Perl is powerful"; if ($text =~ /(?<=Perl is )powerful/) { print "Found 'powerful' preceded by 'Perl is'\n"; }
Condicionales en Expresiones Regulares
Las expresiones regulares en Perl permiten el uso de condicionales para hacer coincidir diferentes patrones basados en condiciones.
En este ejemplo, si a
está presente, se espera c
después de b
; de lo contrario, se espera d
.
Recursividad en Expresiones Regulares
Perl permite la recursividad en las expresiones regulares, lo que es útil para patrones anidados.
my $text = "((()))"; if ($text =~ /^(\((?:[^()]+|(?1))*\))$/) { print "Matched nested parentheses\n"; }
En este ejemplo, (?1)
se refiere a la primera captura, permitiendo la recursividad.
Ejercicios Prácticos
Ejercicio 1: Validar una Dirección de Correo Electrónico
Escribe una expresión regular que valide una dirección de correo electrónico.
my $email = '[email protected]'; if ($email =~ /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/) { print "Valid email address\n"; } else { print "Invalid email address\n"; }
Ejercicio 2: Extraer Números de una Cadena
Escribe una expresión regular que extraiga todos los números de una cadena.
my $text = "The price is 100 dollars and 50 cents"; my @numbers = ($text =~ /(\d+)/g); print "Numbers: @numbers\n"; # Imprime "Numbers: 100 50"
Ejercicio 3: Verificar Palíndromos
Escribe una expresión regular que verifique si una cadena es un palíndromo (se lee igual de izquierda a derecha y de derecha a izquierda).
my $text = "madam"; if ($text =~ /^(.)(.)(.)(.)(.)\5\4\3\2\1$/) { print "The text is a palindrome\n"; } else { print "The text is not a palindrome\n"; }
Conclusión
En este módulo, hemos explorado conceptos avanzados de expresiones regulares en Perl, incluyendo grupos de captura y no captura, lookahead y lookbehind, condicionales y recursividad. Estos conceptos te permitirán realizar búsquedas y manipulaciones de texto más complejas y precisas. Asegúrate de practicar con los ejercicios proporcionados para reforzar tu comprensión y habilidades.
En el próximo módulo, nos adentraremos en la interacción con bases de datos usando DBI, lo que te permitirá trabajar con datos almacenados en bases de datos relacionales desde tus scripts Perl.
Curso de Programación en Perl
Módulo 1: Introducción a Perl
Módulo 2: Programación Básica en Perl
Módulo 3: Trabajando con Datos
Módulo 4: Programación Intermedia en Perl
Módulo 5: Programación Avanzada en Perl
- Expresiones Regulares Avanzadas
- Interacción con Bases de Datos usando DBI
- Programación Web con Perl
- Multithreading