Variabel $/
mengacu pada kecocokan terbaru sedangkan variabel $¢
mengacu pada kecocokan terluar terbaru. Di sebagian besar regex dasar seperti di atas, itu mungkin satu dan sama. Tetapi seperti yang dapat dilihat dari output .raku
metode, Match
objek dapat berisi Match
objek lain (itulah yang Anda dapatkan ketika Anda menggunakan $<foo>
atau $1
untuk menangkap).
Misalkan kita memiliki regex berikut dengan tangkapan terukur
/ ab (cd { say $¢.from, " ", $¢.to } ) + /
Dan berlari itu akan melihat output berikut jika kita cocok dengan "abcdcdcd":
0 2
0 4
0 6
Tetapi jika kita berubah dari menggunakan $¢
menjadi $/
, kita mendapatkan hasil yang berbeda:
2 2
4 4
6 6
(Alasan yang .to
kelihatannya agak tidak aktif adalah .pos
— dan - tidak diperbarui sampai akhir blok tangkap.)
Dengan kata lain, $¢
akan selalu merujuk pada apa yang akan menjadi objek pertandingan terakhir Anda (yaitu, $final = $text ~~ $regex
) sehingga Anda dapat melintasi pohon tangkap kompleks di dalam regex persis seperti yang Anda lakukan setelah menyelesaikan pertandingan penuh Jadi dalam contoh di atas, Anda bisa saja lakukan $¢[0]
untuk merujuk pada pertandingan pertama, $¢[1]
yang kedua, dll.
Di dalam blok kode regex, $/
akan merujuk pada kecocokan paling cepat. Dalam kasus di atas, itulah kecocokan untuk di dalam ( )
dan tidak akan tahu tentang kecocokan lainnya, atau awal asli pencocokan: hanya awal untuk ( )
blok. Jadi berikan regex yang lebih kompleks:
/ a $<foo>=(b $<bar>=(c)+ )+ d /
Kami dapat mengakses di titik mana saja menggunakan $ ¢ semua foo
token dengan mengatakan $¢<foo>
. Kami dapat mengakses bar
token yang diberikan foo
dengan menggunakan $¢<foo>[0]<bar>
. Jika kami menyisipkan blok kode di dalam foo
tangkapan, ia akan dapat mengakses bar
token dengan menggunakan $<bar>
atau $/<bar>
, tetapi itu tidak akan dapat mengakses lainnya foo
.
$/
dan$¢
ruang lingkup: yang terakhir hanya memiliki nilai di dalam regex" berarti$¢
hanya jejak sisa, sama sepertiCursor
. Ketika saya membaca jawaban Anda, saya pikir$¢
akan$*TOP
saya buat di A kemungkinan perbaikan? bagian dari jawaban saya kepada SO "Mengapa / bagaimana variabel tambahan diperlukan dalam mencocokkan karakter arbiter berulang dengan kelompok tangkapan?". Tetapi upaya saya untuk mengganti$*TOP
dengan$¢
gagal. Apakah Anda mengerti maksud saya dalam jawaban itu? Bisakah Anda membuatnya bekerja?