Курс по 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 да съвпадне. Затова регулярният израз успява.

  2. token отказва да върне каквото и да било: \d+ задържа цялото 12345, за буквалната 5 не остава нищо и токенът се проваля. Точно това поведение без връщане назад прави token правилният избор по подразбиране вътре в граматиките.

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

regex срещу token   |   Правило с интервали