Курс языка программирования Raku / Регулярные выражения и грамматики / Регулярные выражения / Захваты
Именованные захваты
Нумерованные захваты удобны, но, когда шаблон разрастается, имена
понятнее номеров. Чтобы дать захвату имя, пишут
$<имя>=( … ):
if 'Anna:30' ~~ / $<name>=(\w+) ':' $<age>=(\d+) / {
say $<name>; # 「Anna」
say $<age>; # 「30」
}Теперь к захваченным кусочкам обращаются по имени, через
$<name> и $<age>, а не через
$0 и $1. Это то же самое, что написать
$/<name>, потому что имена живут внутри переменной
совпадения $/.
С именованными захватами шаблон читается почти как описание данных:
if 'x=5' ~~ / $<key>=(\w+) '=' $<value>=(\w+) / {
say "key is $<key>, value is $<value>"; # key is x, value is 5
}Как и позиционный, каждый именованный захват — это объект совпадения,
поэтому $<age>.Str даёт простой текст, а
$<age>.from — его позицию.
Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Тест — Позиционные захваты | Тест — Захваты →
💪 Или перейдите сразу к упражнениям этого
раздела.