Переменная $/относится к самому последнему совпадению, а переменная $¢относится к самому последнему внешнему совпадению. В большинстве основных регулярных выражений, подобных приведенным выше, это может быть одно и то же. Но как видно из выходных данных .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.
$/и$¢является областью действия: последний имеет значение только в регулярном выражении», чтобы означать, что$¢это просто рудиментарный след, какCursorесть. Когда я прочитал ваш ответ, я подумал,$¢будет ли$*TOPя создан в A возможное улучшение? раздел моего ответа SO. «Почему / как нужна дополнительная переменная для сопоставления повторяющегося произвольного символа с группами захвата?». Но мои попытки заменить$*TOPна$¢провалились. Вы понимаете мою точку зрения в этом ответе? Вы можете заставить это работать?