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