Курс языка программирования Raku / Регулярные выражения и грамматики / Регулярные выражения / Утверждения просмотра / Exercises / Между скобками

Решение: Между скобками

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

Код

say '$50' ~~ / <?after '$'> \d+ >> <!before '.'> /;

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

Вывод

「50」

Комментарии

  1. <?after '$'> — положительный просмотр назад: он требует, чтобы прямо перед числом стоял $. А <!before '.'> — отрицательный просмотр вперёд: он требует, чтобы точка следом не шла. Ни знак $, ни окружение частью совпадения не становятся, поэтому результат — просто 50.

  2. >> — граница слова, отмечающая конец числа. Без неё жадный \d+ мог бы отступить назад: в строке $39.99 он отдал бы 9 и сопоставил бы 3, за которой точки нет. >> заставляет брать число целиком, поэтому $3.99 и $39.99 правильно не дают совпадения.

  3. Это как раз тот случай, где просмотр вперёд себя оправдывает: «за этим не следует десятичная точка» нельзя выразить обычной захватывающей группой, потому что захватывать там нечего — есть лишь условие, которое нужно проверить.

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

Между скобками   |   Наречия