Курс по 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 тест върху съдържанието на тази тема.

Навигация в курса

Прихващания   |   Тест — Позиционни прихващания


💪 Или преминете направо към упражненията в този раздел.