Курс по 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да съвпадне. Затова регулярният израз успява.tokenотказва да върне каквото и да било:\d+задържа цялото12345, за буквалната5не остава нищо и токенът се проваля. Точно това поведение без връщане назад правиtokenправилният избор по подразбиране вътре в граматиките.