Курс языка программирования 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 тест по содержанию этой темы.
Навигация по курсу
← Захваты | Тест — Позиционные захваты →
💪 Или перейдите сразу к упражнениям этого
раздела.