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.

my $text = "abc";
if ($text =~ /(a)?b(?(1)c|d)/) {
    print "Matched 'abc' or 'bd'\n";
}

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.

© Copyright 2024. Todos los derechos reservados