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

Навігація курсом

Тест — Ігнорування регістру   |   Глобальне зіставлення


💪 Або перейдіть одразу до вправ цього розділу.