Raku-Kurs / Reguläre Ausdrücke und Grammatiken / Reguläre Ausdrücke / Captures

Positionelle Captures

Setzen Sie einen Teil des Musters in runde Klammern ( ), um ihn zu capturen. Nach einem erfolgreichen Treffer steht jedes gecapturte Stück als $0, $1 und so weiter zur Verfügung, ab null in der Reihenfolge nummeriert, in der die Klammern öffnen:

if '2025-06' ~~ / (\d+) '-' (\d+) / {
    say $0; # 「2025」
    say $1; # 「06」
}

Das erste Klammerpaar hat das Jahr in $0 gecapturt, das zweite den Monat in $1. Der Text dazwischen — das wörtliche - — wird getroffen, aber nicht gecapturt.

Jedes Capture ist selbst ein kleines Match-Objekt, Sie können es also nach seinem .Str, seiner Position und so weiter fragen. In einer Zeichenkette mit doppelten Anführungszeichen wird ein Capture als sein getroffener Text interpoliert:

if 'hello world' ~~ / (\w+) ' ' (\w+) / {
    say "$1 $0"; # world hello
}

Hier werden die beiden gecapturten Wörter in umgekehrter Reihenfolge ausgegeben, was sie vertauscht.

Die Captures liegen außerdem in der Match-Variablen $/, und $0 ist in Wahrheit eine Kurzform für $/[0]. Sie können unmittelbar über $/ arbeiten:

if '2025-06' ~~ / (\d+) '-' (\d+) / {
    say $/[0];    # 「2025」
    say $/[1];    # 「06」
    say $/.elems; # 2
}

$/ ist das ganze Match-Objekt, das Indizieren erreicht die positionalen Captures, und .elems sagt Ihnen, wie viele es sind.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Captures   |   Quiz — Positionelle Captures


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.