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

Просмотр вперёд

Просмотр вперёд проверяет, что идёт сразу после текущей позиции. Записывается он в угловых скобках:

  • <?before …> — срабатывает, если текст впереди совпадает (положительный просмотр вперёд)
  • <!before …> — срабатывает, если текст впереди не совпадает (отрицательный просмотр вперёд)

Само утверждение не сопоставляет ни одного символа; оно лишь проверяет позицию. Например, сопоставим число только тогда, когда за ним следует слово dollars:

say '100 dollars' ~~ / \d+ <?before ' dollars'> /; # 「100」

Совпадение — только 100: текст dollars был проверен, но не включён.

Поскольку просмотр вперёд лишь утверждает, что идёт следом, одно и то же число совпадает или нет в зависимости от валюты после него:

say so '100 euro'    ~~ / \d+ <?before ' euro'> /; # True
say so '100 dollars' ~~ / \d+ <?before ' euro'> /; # False

Цифры в обеих строках одинаковые, но утверждение принимает 100 только тогда, когда следом идёт euro.

Отрицательная форма полезна для случаев «… но не тогда, когда следом идёт …». Сопоставим cat только если за ним не следует цифра:

say so 'cats' ~~ / cat <!before \d> /; # True
say so 'cat5' ~~ / cat <!before \d> /; # False

В cat5 просмотр вперёд видит цифру сразу после cat, поэтому отрицательное утверждение не срабатывает и всё сопоставление проваливается.

Практика

Пройдите 1 тест по содержанию этой темы.

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

Утверждения просмотра   |   Тест — Просмотр вперёд


💪 Или перейдите сразу к упражнениям этого раздела.