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