Курс языка программирования Raku / Регулярные выражения и грамматики / Регулярные выражения / Утверждения просмотра / Exercises / Между скобками
Решение: Между скобками
Вот один из возможных вариантов решения задачи.
Код
say '$50' ~~ / <?after '$'> \d+ >> <!before '.'> /;🦋 Исходный код можно найти в файле whole-dollar.raku.
Вывод
「50」Комментарии
<?after '$'>— положительный просмотр назад: он требует, чтобы прямо перед числом стоял$. А<!before '.'>— отрицательный просмотр вперёд: он требует, чтобы точка следом не шла. Ни знак$, ни окружение частью совпадения не становятся, поэтому результат — просто50.>>— граница слова, отмечающая конец числа. Без неё жадный\d+мог бы отступить назад: в строке$39.99он отдал бы9и сопоставил бы3, за которой точки нет.>>заставляет брать число целиком, поэтому$3.99и$39.99правильно не дают совпадения.Это как раз тот случай, где просмотр вперёд себя оправдывает: «за этим не следует десятичная точка» нельзя выразить обычной захватывающей группой, потому что захватывать там нечего — есть лишь условие, которое нужно проверить.
Навигация по курсу
← Между скобками | Наречия →