Курс языка программирования Raku / Регулярные выражения и грамматики / Грамматики / Что такое грамматика

Именованные регулярные выражения

До сих пор вы писали шаблоны прямо внутри / … /. Но шаблону можно дать имя и использовать его повторно — совсем как подпрограмму. Объявляют его через my regex (или my token, с которым вы как следует познакомитесь чуть позже):

my regex number { \d+ }

Чтобы воспользоваться именованным регулярным выражением внутри другого шаблона, напишите его имя в угловых скобках — <number>:

my regex number { \d+ }

if '42 cats' ~~ / <number> / {
    say $<number>; # 「42」
}

Вызов <number> и сопоставляет шаблон, и захватывает его под этим именем, поэтому совпавший текст доступен как $<number> — именованный захват достаётся вам даром.

Именованное регулярное выражение можно использовать в одном шаблоне несколько раз. Когда оно встречается больше одного раза, захваты становятся списком, доступным по индексу:

my regex num { \d+ }

if '3-4' ~~ / <num> '-' <num> / {
    say $<num>[0]; # 「3」
    say $<num>[1]; # 「4」
}

Именованные регулярные выражения сохраняют шаблоны удобочитаемыми и позволяют собирать большие шаблоны из меньших, хорошо названных частей. Ровно этим и занимается грамматика, только в большем масштабе.

Практика

Пройдите 1 тест по содержанию этой темы.

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

Что такое грамматика   |   Тест — Именованные регулярные выражения


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