Les expressions regulars són una eina poderosa per a la manipulació de text en Perl. En aquest mòdul, explorarem les característiques avançades de les expressions regulars que et permetran escriure patrons més complexos i eficients.

Continguts

Revisió de Conceptes Bàsics

Abans d'endinsar-nos en les característiques avançades, fem una breu revisió dels conceptes bàsics de les expressions regulars en Perl.

my $text = "Hola, món!";
if ($text =~ /Hola/) {
    print "Patró trobat!\n";
}

En aquest exemple, el patró Hola es busca dins de la cadena $text.

Grups de Captura i Retroreferències

Grups de Captura

Els grups de captura permeten agrupar parts d'una expressió regular i accedir a elles posteriorment.

my $text = "Perl és genial!";
if ($text =~ /(Perl) és (genial)/) {
    print "Grup 1: $1\n";  # Perl
    print "Grup 2: $2\n";  # genial
}

Retroreferències

Les retroreferències permeten referir-se a grups de captura dins de la mateixa expressió regular.

my $text = "abcabc";
if ($text =~ /(abc)\1/) {
    print "Patró repetit trobat!\n";  # abcabc
}

Avarícia i No Avarícia

Avarícia

Per defecte, els quantificadors en les expressions regulars són avariciosos, és a dir, intenten coincidir amb la major quantitat de text possible.

my $text = "abc123abc";
if ($text =~ /a.*c/) {
    print "Patró avariciós trobat!\n";  # abc123abc
}

No Avarícia

Els quantificadors no avariciosos intenten coincidir amb la menor quantitat de text possible. S'afegeix un ? després del quantificador.

my $text = "abc123abc";
if ($text =~ /a.*?c/) {
    print "Patró no avariciós trobat!\n";  # abc
}

Assertacions

Assertacions Positives

Les assertacions positives verifiquen que un patró existeix en una posició específica sense incloure'l en la coincidència.

my $text = "Perl és genial!";
if ($text =~ /Perl(?= és genial)/) {
    print "Assertació positiva trobada!\n";  # Perl
}

Assertacions Negatives

Les assertacions negatives verifiquen que un patró no existeix en una posició específica.

my $text = "Perl és genial!";
if ($text =~ /Perl(?! és dolent)/) {
    print "Assertació negativa trobada!\n";  # Perl
}

Modificadors d'Expressions Regulars

Els modificadors canvien el comportament de les expressions regulars.

Modificador i

Fa que la coincidència no distingeixi entre majúscules i minúscules.

my $text = "Perl és genial!";
if ($text =~ /perl/i) {
    print "Coincidència sense distingir majúscules i minúscules!\n";  # Perl
}

Modificador s

Permet que el punt (.) coincideixi amb noves línies.

my $text = "Perl\nés genial!";
if ($text =~ /Perl.*genial/s) {
    print "Coincidència amb noves línies!\n";  # Perl\nés genial
}

Modificador m

Permet que ^ i $ coincideixin amb el començament i el final de cada línia, respectivament.

my $text = "Perl\nés genial!";
if ($text =~ /^és/m) {
    print "Coincidència al començament de la línia!\n";  # és
}

Exercicis Pràctics

Exercici 1

Escriu una expressió regular que coincideixi amb una adreça de correu electrònic vàlida.

my $email = "[email protected]";
if ($email =~ /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/) {
    print "Adreça de correu electrònic vàlida!\n";
}

Exercici 2

Escriu una expressió regular que coincideixi amb un número de telèfon en el format (123) 456-7890.

my $phone = "(123) 456-7890";
if ($phone =~ /^\(\d{3}\) \d{3}-\d{4}$/) {
    print "Número de telèfon vàlid!\n";
}

Exercici 3

Escriu una expressió regular que coincideixi amb una data en el format DD/MM/YYYY.

my $date = "31/12/2023";
if ($date =~ /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/\d{4}$/) {
    print "Data vàlida!\n";
}

Conclusió

En aquest mòdul, hem explorat les característiques avançades de les expressions regulars en Perl, incloent grups de captura, retroreferències, avarícia i no avarícia, assertacions i modificadors. Amb aquests coneixements, podràs escriure patrons més complexos i eficients per a la manipulació de text.

En el proper mòdul, ens endinsarem en la interacció amb bases de dades utilitzant el mòdul DBI de Perl.

© Copyright 2024. Tots els drets reservats