Kurso de Raku / Regulesprimoj kaj gramatikoj / Regulesprimoj / Kaptoj
Nekaptaj grupoj
Rondaj krampoj ( ) faras du laborojn samtempe: ili
grupigas parton de la ŝablono kaj ili kaptas ĝin en
$0, $1 kaj tiel plu. Foje vi volas nur la
unuan laboron — trakti plurajn atomojn kiel unu solan unuon — sen
elspezi kaptonumeron por ĝi. Por tio, uzu rektajn krampojn
[ ], kiuj grupigas sen kapti.
Grupigo gravas tuj kiam vi alfiksas kvantoron. Kvantoro ligiĝas nur al la atomo tuj antaŭ ĝi, do la suba ŝablono ripetas nur la finan literon:
say 'abccc' ~~ / abc ** 3 /; # 「abccc」Nur la c estis ripetita trifoje. Envolvu la tutan pecon
en [ ] por ripeti ĉion:
say 'abcabcabc' ~~ / [ abc ] ** 3 /; # 「abcabcabc」Nun [ abc ] estas unu unuo, kaj ** 3
aplikiĝas al la grupo.
Ĉar [ ] prenas neniun kaptolokon, la numeroj restas
rezervitaj por la partoj, pri kiuj vi efektive zorgas. Komparu simplan
ŝlosil-valoran kongruon:
if 'foo=42' ~~ / (\w+) '=' (\d+) / {
say $0; # 「foo」
say $1; # 「42」
}Supozu, ke la ŝlosilo povas esti antaŭata de vorto, kiun vi volas
preterlasi. Grupigu tiun prefikson per [ ], por ke ĝi ne
ĝenu la numeradon:
if 'the foo=42' ~~ / [ \w+ \s ]? (\w+) '=' (\d+) / {
say $0; # 「foo」
say $1; # 「42」
}La nedeviga [ \w+ \s ]? kongruis kun the,
sed pretendis neniun kapton, do $0 ankoraŭ estas la ŝlosilo
kaj $1 ankoraŭ estas la valoro. Se vi estus skribinta tiun
prefikson per ( ), ĉio estus ŝoviĝinta: la prefikso fariĝus
$0, la ŝlosilo $1, kaj la valoro
$2.
La regulo estas mallonga: uzu ( ), kiam vi volas
konservi la kongruintan tekston, kaj [ ], kiam vi volas nur
grupigi. Ambaŭ specoj akceptas kvantorojn kaj alternativojn, kial la pli
frua alternativo [ cat | dog ] house uzis rektajn krampojn
— ĝi bezonis la grupigon sed ne alian kapton.
Kursa navigado
← Kvizo — Kaptoj | Dividu dosiernomon →
💪 Aŭ iru rekte al la
ekzercoj de ĉi tiu sekcio.