Змінна $/
відноситься до останнього збігу, тоді як змінна $¢
- до останнього зовнішнього збігу. У більшості основних регексів, як у наведених вище, це можуть бути одні й ті ж. Але як видно з результатів .raku
методу, Match
об'єкти можуть містити інші Match
об’єкти (саме це ви отримуєте при використанні $<foo>
або $1
для захоплення).
Припустимо, замість цього у нас був такий регекс з кількісно визначеним захопленням
/ ab (cd { say $¢.from, " ", $¢.to } ) + /
І запустивши, він побачив би такий результат, якби ми співставились з "abcdcdcd":
0 2
0 4
0 6
Але якщо ми переходимо від звичного $¢
до $/
, ми отримуємо інший результат:
2 2
4 4
6 6
(Причина, .to
здається, трохи відключена, полягає в тому, що вона —і .pos
- не оновлюються до кінця блоку захоплення.)
Іншими словами, завжди$¢
буде посилатися на те, що буде вашим кінцевим об'єктом відповідності (тобто ), щоб ви могли пройти складне дерево захоплення всередині регексу точно так само, як і після завершення повного матчу. Отже, у наведеному вище прикладі ви могли просто робити для позначення першого матчу, другого тощо.$final = $text ~~ $regex
$¢[0]
$¢[1]
Всередині блоку коду регулярних виразів $/
буде позначатися найвідповідніша відповідність. У вищенаведеному випадку це збіг всередині ( )
та не дізнається про інші матчі, а також про початковий збіг: лише початок для ( )
блоку. Тому дайте більш складний регулярний вираз:
/ a $<foo>=(b $<bar>=(c)+ )+ d /
Ми можемо отримати доступ до будь-якої точки, використовуючи $ ¢ всі foo
жетони, сказавши $¢<foo>
. Ми можемо отримати доступ до bar
жетонів даної особи foo
за допомогою $¢<foo>[0]<bar>
. Якщо ми вставимо блок коду всередині foo
запису, він зможе отримати доступ до bar
маркерів за допомогою $<bar>
або $/<bar>
, але він не зможе отримати доступ до інших foo
s.
$/
та$¢
сферою дії: останній має лише значення всередині регулярного вираження", тобто означає, що$¢
це просто вестигіальний слід, як іCursor
є. Коли я прочитав вашу відповідь, я подумав,$¢
що це$*TOP
я створив у Можливому вдосконаленні? розділ моєї відповіді на ВО "Чому / як потрібна додаткова змінна для узгодження повторного довільного символу з групами захоплення?". Але мої спроби замінити$*TOP
на$¢
не вдалися. Ви розумієте мою думку в цій відповіді? Чи можете ви змусити це працювати?