Курс Raku / Регулярні вирази та граматики / Регулярні вирази / Захоплення

Позиційні захоплення

Візьміть частину шаблону в круглі дужки ( ), щоб захопити її. Після успішного збігу кожен захоплений шматок доступний як $0, $1 і так далі — нумерація від нуля в порядку відкривання дужок:

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

Перша пара дужок захопила рік у $0, друга — місяць у $1. Текст між ними, літеральний -, зіставляється, але не захоплюється.

Кожне захоплення саме є невеликим об’єктом збігу, тож у нього можна запитати .Str, позицію тощо. У рядку з подвійними лапками захоплення інтерполюється як текст, з яким воно збіглося:

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

Тут два захоплені слова виводяться у зворотному порядку, що міняє їх місцями.

Захоплення також зберігаються у змінній збігу $/, і $0 насправді є коротким записом для $/[0]. Працювати можна й безпосередньо через $/:

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

$/ є цілим об’єктом збігу, індексування його дістає позиційні захоплення, а .elems каже, скільки їх.

Практика

Виконайте 1 тест за змістом цієї теми.

Навігація курсом

Захоплення   |   Тест — Позиційні захоплення


💪 Або перейдіть одразу до вправ цього розділу.