Курс языка программирования 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Комментарии
В
regexсначала\d+захватывает всё12345, а затем возвращается назад, отдавая последнюю5, чтобы совпала буквальная5. Поэтому regex срабатывает.tokenотдавать ничего не желает:\d+оставляет себе всё12345, буквальной5ничего не достаётся, и токен не срабатывает. Именно это поведение без возврата и делаетtokenправильным выбором по умолчанию внутри грамматик.