Corso di Raku / Espressioni regolari e grammatiche / Espressioni regolari / Sostituzione e rimpiazzo

Catture nel rimpiazzo

La parte di rimpiazzo di s/// può riferirsi alle catture fatte dallo schema. Questo ti permette di riordinare il testo riconosciuto invece di limitarti a buttarlo via.

Per esempio, trasforma una data scritta come anno-mese in mese/anno catturando entrambi i numeri e rimettendoli nell’ordine opposto:

my $d = '2025-06';
$d ~~ s/ (\d+) '-' (\d+) /$1\/$0/;
say $d; # 06/2025

Lo schema cattura l’anno in $0 e il mese in $1. Nel rimpiazzo, $1 e $0 sono scritti nell’ordine invertito, con una barra fra di essi. (La barra è protetta come \/ così da non essere scambiata per la fine della sostituzione.) Nota che gli spazi sono insignificanti dal lato dello schema ma letterali dal lato del rimpiazzo, quindi il rimpiazzo si scrive senza spazi attorno.

Le catture con nome funzionano allo stesso modo. Questo fa leggere chiaramente una sostituzione anche quando i pezzi sono parecchi:

my $name = 'Doe, Jane';
$name ~~ s/ $<last>=(\w+) ', ' $<first>=(\w+) /$<first> $<last>/;
say $name; # Jane Doe

Quiz — L’operatore s///   |   Traslitterazione


💪 Oppure vai direttamente agli esercizi di questa sezione.