Cursus Raku / Reguliere expressies en grammatica’s / Reguliere expressies / Substitutie en vervanging

Captures in de vervanging

Het vervangingsdeel van s/// kan verwijzen naar de captures die het patroon gemaakt heeft. Zo kun je de gematchte tekst herschikken in plaats van haar eenvoudigweg weg te gooien.

Zet bijvoorbeeld een datum die als jaar-maand geschreven is om naar maand/jaar door beide getallen te capturen en ze in de andere volgorde terug te zetten:

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

Het patroon captureert het jaar in $0 en de maand in $1. In de vervanging staan $1 en $0 in omgekeerde volgorde, met een schuine streep ertussen. (De schuine streep wordt als \/ ge-escapet zodat hij niet voor het einde van de substitutie aangezien wordt.) Merk op dat spaties aan de patroonkant onbetekenend zijn maar aan de vervangingskant letterlijk, dus is de vervanging zonder omringende spaties geschreven.

Benoemde captures werken op dezelfde manier. Dat laat een substitutie duidelijk lezen, zelfs wanneer er meerdere stukken zijn:

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

Cursusnavigatie

Quiz — De s///-operator   |   Transliteratie


💪 Of ga direct naar de oefeningen in deze sectie.