Курс языка программирования 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 тест по содержанию этой темы.

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

Тест — Позиционные захваты   |   Тест — Захваты


💪 Или перейдите сразу к упражнениям этого раздела.