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, .rakuyöntemin çıktısında görülebileceği gibi , Matchnesneler başka Matchnesneler de içerebilir (kullandığınızda $<foo>veya $1yakalamalarda 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
( .toBiraz 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 foojetonların tümünü kullanarak söyleyebiliriz $¢<foo>. Biz erişebileceği barbelirli bir bölgesinin belirteçleri fookullanarak $¢<foo>[0]<bar>. foo'İn yakalanmasının içine bir kod bloğu bareklersek, $<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ıCursorolduğunu. Cevabını okuduğumda düşündüm$¢olurdu$*TOPoluş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$*TOPile$¢başarısız oldu. Bu cevaptaki amacımı anlıyor musunuz? İşe yarayabilir misin?