Zmienna $/odnosi się do ostatniego dopasowania, podczas gdy zmienna $¢odnosi się do ostatniego najbardziej zewnętrznego dopasowania. W większości podstawowych wyrażeń regularnych, takich jak powyższe, może to być jedno i to samo. Ale jak widać na podstawie wyniku .rakumetody, Matchobiekty mogą zawierać inne Matchobiekty (to, co otrzymujesz, gdy używasz $<foo>lub $1do przechwytywania).
Załóżmy, że zamiast tego mieliśmy następujący regex z ujęciem ilościowym
/ ab (cd { say $¢.from, " ", $¢.to } ) + /
I uruchomiłby, zobaczyłby następujące dane wyjściowe, gdybyśmy dopasowali do „abcdcdcd”:
0 2
0 4
0 6
Ale jeśli zmienimy z używania $¢na $/, otrzymamy inny wynik:
2 2
4 4
6 6
( .toWydaje się, że to trochę nie tak, ponieważ .pos- i - nie są aktualizowane do końca bloku przechwytywania.)
Innymi słowy, zawsze$¢ będzie odnosił się do tego, jaki będzie twój ostateczny obiekt dopasowania (tj. ), Abyś mógł przechodzić przez złożone drzewo przechwytywania w wyrażeniu regularnym dokładnie tak, jak zrobiłbyś to po zakończeniu pełnego dopasowania. W powyższym przykładzie możesz po prostu zrobić, aby odnieść się do pierwszego dopasowania, drugiego itd.$final = $text ~~ $regex$¢[0]$¢[1]
Wewnątrz bloku kodu wyrażenia regularnego $/będzie odnosić się do najbardziej bezpośredniego dopasowania. W powyższym przypadku jest to dopasowanie do wewnątrz ( )i nie będzie wiadomo o innych dopasowaniach, ani o oryginalnym początku dopasowania: tylko początek ( )bloku. Podaj więc bardziej złożony regex:
/ a $<foo>=(b $<bar>=(c)+ )+ d /
Możemy uzyskać dostęp w dowolnym momencie za pomocą $ ¢ wszystkich footokenów, mówiąc $¢<foo>. Możemy uzyskać dostęp do bartokenów danego fooza pomocą $¢<foo>[0]<bar>. Jeśli wstawimy blok kodu wewnątrz fooprzechwytywania, będzie on mógł uzyskać dostęp do bartokenów za pomocą $<bar>lub $/<bar>, ale nie będzie mógł uzyskać dostępu do innych foos.
$/i$¢jest zakres: ten ostatni ma tylko wartość w wyrażeniu regularnym”, co oznacza, że$¢był jedynie śladowym śladem, tak jakCursorjest. Kiedy czytam twoją odpowiedź, pomyślałem,$¢że to$*TOPja stworzyłem w A możliwej poprawie? sekcja mojej odpowiedzi na pisemne zgłoszenie zastrzeżeń „Dlaczego / jak potrzebna jest dodatkowa zmienna w dopasowywaniu powtarzającego się arbitralnego znaku z grupami przechwytywania?”. Ale moje próby zastąpienia$*TOPprzez$¢nie powiodły się. Czy rozumiesz mój punkt w tej odpowiedzi? Czy potrafisz sprawić, żeby działało?