Курс по 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 са два начина да се стигне до една и съща цел: да се ограничи наречието само до онази част от шаблона, която се нуждае от него. Същият превключвател „включено/изключено“ работи и за другите наречия вътре в шаблона.

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

Тест — Пренебрегване на регистъра   |   Глобално съпоставяне


💪 Или преминете направо към упражненията в този раздел.