Raku kurss / Regulārās izteiksmes un gramatikas / Regulārās izteiksmes / Tvērumi
Grupas bez tvēruma
Apaļās iekavas ( ) dara divus darbus uzreiz: tās
sagrupē raksturā daļu un satver to $0,
$1 un tā tālāk. Dažreiz vēlaties tikai pirmo darbu —
uztvert vairākus atomus kā vienu vienību —, netērējot tam tvēruma
numuru. Tam izmantojiet kvadrātiekavas [ ], kas grupē
bez tveršanas.
Grupēšanai ir nozīme, tiklīdz piekabināt kvantoru. Kvantors saistās tikai ar atomu, kas ir tieši pirms tā, tāpēc zemāk redzamais raksturs atkārto tikai pēdējo burtu:
say 'abccc' ~~ / abc ** 3 /; # 「abccc」Trīs reizes tika atkārtots tikai c. Ietiniet visu gabalu
[ ], lai atkārtotu to visu:
say 'abcabcabc' ~~ / [ abc ] ** 3 /; # 「abcabcabc」Tagad [ abc ] ir viena vienība, un ** 3
attiecas uz grupu.
Tā kā [ ] neaizņem tvēruma vietu, numuri paliek
rezervēti tām daļām, kas jums patiešām rūp. Salīdziniet vienkāršu
atslēgas un vērtības sakritību:
if 'foo=42' ~~ / (\w+) '=' (\d+) / {
say $0; # 「foo」
say $1; # 「42」
}Pieņemsim, ka pirms atslēgas var būt vārds, ko vēlaties izlaist.
Sagrupējiet šo priedēkli ar [ ], lai tas netraucētu
numerāciju:
if 'the foo=42' ~~ / [ \w+ \s ]? (\w+) '=' (\d+) / {
say $0; # 「foo」
say $1; # 「42」
}Neobligātais [ \w+ \s ]? sakrita ar the,
taču nepieprasīja nevienu tvērumu, tāpēc $0 joprojām ir
atslēga un $1 joprojām ir vērtība. Ja šo priedēkli būtu
uzrakstījis ar ( ), viss būtu pabīdījies: priedēklis kļūtu
par $0, atslēga par $1 un vērtība par
$2.
Likums ir īss: izmantojiet ( ), kad vēlaties paturēt
sakritušo tekstu, un [ ], kad vēlaties tikai sagrupēt. Abi
veidi pieņem kvantorus un alternatīvas, un tieši tāpēc agrākā
alternatīva [ cat | dog ] house izmantoja kvadrātiekavas —
tai bija vajadzīga grupēšana, nevis vēl viens tvērums.
Kursa navigācija
← Viktorīna — Tvērumi | Sadaliet faila nosaukumu →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.