Değişken $/
en son eşleşmeyi $¢
ifade ederken, değişken en son eşleşmeyi ifade eder. Yukarıdaki gibi çoğu normal regex'lerde, bu bir ve aynı olabilir. Ancak, .raku
yöntemin çıktısında görülebileceği gibi , Match
nesneler başka Match
nesneler de içerebilir (kullandığınızda $<foo>
veya $1
yakalamalarda elde ettiğiniz şey budur ).
Bunun yerine, nicelikli bir yakalama ile aşağıdaki normal ifadeye sahip olduğumuzu varsayalım
/ ab (cd { say $¢.from, " ", $¢.to } ) + /
Ve "abcdcdcd" ile eşleşirsek aşağıdaki çıktıyı görecek şekilde koştu:
0 2
0 4
0 6
Kullandığımız değiştirmek Ama eğer $¢
için $/
, biz farklı bir sonuç almak:
2 2
4 4
6 6
( .to
Biraz kapalı gibi görünmesinin nedeni .pos
, yakalama bloğunun sonuna kadar güncellenmemesidir.)
Başka bir deyişle, $¢
her zaman son eşleme nesnenizin ne olacağına atıfta bulunacaktır (yani, $final = $text ~~ $regex
), tam eşleşmeyi bitirdikten sonra yaptığınız gibi normal ifadenin içinde karmaşık bir yakalama ağacından geçebilirsiniz. Yukarıdaki örnekte, do $¢[0]
ilk maçında başvurmak için $¢[1]
ikinci vb
Normal ifade kod bloğunun $/
içinde en yakın eşleşmeyi ifade eder. Yukarıdaki durumda, bu içerideki maçtır ( )
ve diğer maçlar veya eşleşmenin orijinal başlangıcı hakkında bilgi sahibi olmayacaktır: sadece ( )
blok için başlangıç . Bu yüzden daha karmaşık bir normal ifade verin:
/ a $<foo>=(b $<bar>=(c)+ )+ d /
Herhangi bir noktada $ ¢ kullanarak foo
jetonların tümünü kullanarak söyleyebiliriz $¢<foo>
. Biz erişebileceği bar
belirli bir bölgesinin belirteçleri foo
kullanarak $¢<foo>[0]<bar>
. foo
'İn yakalanmasının içine bir kod bloğu bar
eklersek, $<bar>
veya tuşlarını kullanarak belirteçlere erişebilir $/<bar>
, ancak diğer kodlara erişemez foo
.
$/
ve$¢
kapsamı: ikincisi sadece regex içinde bir değere sahiptir" ortalamaya$¢
sadece körelmiş bir iz vardı tıpkıCursor
olduğunu. Cevabını okuduğumda düşündüm$¢
olurdu$*TOP
oluşturulan ben Olası bir gelişme? bölümünde Cevabıma SO için "eşleştirme gerekli ek bir değişkendir nasıl Why / yakalama gruplarıyla keyfi karakterini tekrarlanan?". Ama benim girişimleri yerine$*TOP
ile$¢
başarısız oldu. Bu cevaptaki amacımı anlıyor musunuz? İşe yarayabilir misin?