Курс языка программирования Raku / Регулярные выражения и грамматики / Регулярные выражения / Наречия
Область действия наречия
Наречие :i можно записать в двух местах, и разница в
том, где оно действует. У оператора запись
m:i/…/ делает нечувствительным к регистру
весь шаблон. Записанное же внутри регулярного
выражения, :i работает позиционно: оно действует
только начиная с того места, где появилось. Это позволяет ослабить
правило регистра лишь для части шаблона:
say 'RAKU' ~~ /R :i aku/; # 「RAKU」
say 'raku' ~~ /R :i aku/; # NilЗдесь начальная R по-прежнему сопоставляется с учётом
регистра — поэтому raku в нижнем регистре не подходит, — а
:i делает нечувствительным к регистру только следующее за
ним aku. При записи m:i/Raku/, наоборот,
нечувствительна каждая буква, и подходят и RAKU, и
raku.
Ограничено группой
Действие внутреннего наречия ограничено также объемлющей группой. В
/[:i abc]def/ регистр игнорирует только abc;
идущее после группы def сопоставляется строго:
say 'ABCdef' ~~ /[:i abc]def/; # 「ABCdef」
say 'ABCDEF' ~~ /[:i abc]def/; # NilКак выключить наречие
Чтобы посреди шаблона выключить наречие обратно, отрицайте его знаком
!. Так :!i восстанавливает чувствительность к
регистру с этого места:
say 'ABCdef' ~~ / :i abc :!i def /; # 「ABCdef」
say 'ABCDEF' ~~ / :i abc :!i def /; # Nil:i ослабляет правило регистра для abc,
затем :!i возвращает его на место, так что def
должно совпасть в точности. Группировка и :!i — два пути к
одной цели: ограничить наречие именно той частью шаблона, которой оно
нужно. Такой же выключатель работает и для остальных наречий,
записываемых внутри шаблона.
Навигация по курсу
← Тест — Игнорирование регистра | Глобальное сопоставление →
💪 Или перейдите сразу к упражнениям этого
раздела.