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

Решение: regex против token

Вот один из возможных вариантов решения задачи.

Код

my regex r { \d+ '5' }
my token t { \d+ '5' }

say so '12345' ~~ / <r> /;
say so '12345' ~~ / <t> /;

🦋 Исходный код можно найти в файле token-instead.raku.

Вывод

True
False

Комментарии

  1. В regex сначала \d+ захватывает всё 12345, а затем возвращается назад, отдавая последнюю 5, чтобы совпала буквальная 5. Поэтому regex срабатывает.

  2. token отдавать ничего не желает: \d+ оставляет себе всё 12345, буквальной 5 ничего не достаётся, и токен не срабатывает. Именно это поведение без возврата и делает token правильным выбором по умолчанию внутри грамматик.

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

regex против token   |   Правило с пробелами