Курс языка программирования 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 — два пути к одной цели: ограничить наречие именно той частью шаблона, которой оно нужно. Такой же выключатель работает и для остальных наречий, записываемых внутри шаблона.

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

Тест — Игнорирование регистра   |   Глобальное сопоставление


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