Курс языка программирования Raku / Регулярные выражения и грамматики / Регулярные выражения / Квантификаторы / Exercises / От двух до четырёх цифр

Решение: От двух до четырёх цифр

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

Код

say 'abc12345' ~~ / \d ** 2..4 /;

🦋 Исходный код можно найти в файле two-to-four-digits.raku.

Вывод

「1234」

Комментарии

  1. \d ** 2..4 соответствует от двух до четырёх цифр подряд.

  2. В строке доступно пять цифр, но диапазон ограничивает совпадение четырьмя, поэтому шаблон берёт 1234, оставляя последнюю 5. Будучи жадным, он берёт максимум из разрешённого диапазоном, а не минимум.

  3. Жадность действует только внутри одного совпадения — движок всё равно останавливается на первом месте, где шаблон срабатывает. Даже если дальше в строке есть более длинная последовательность цифр, до неё дело не доходит:

    say 'abc123def6789012z' ~~ / \d ** 2..4 /;   # 「123」

    Здесь совпадает 123, хотя более поздняя вереница 6789012 заполнила бы весь диапазон, дав 6789. Побеждает самое левое совпадение.

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

От двух до четырёх цифр   |   Экономное совпадение