gpt4 book ai didi

regex - 正则表达式中的 $/和 $¢ 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 04:25:02 25 4
gpt4 key购买 nike

如标题所示, $/ 有什么区别?它们似乎总是具有相同的值:

my $text = "Hello world";

$text ~~ /(\w+) { say $/.raku } (\w+)/;
$text ~~ /(\w+) { say $¢.raku } (\w+)/;

两者都会导致 Match 对象具有相同的值。使用其中一个的逻辑是什么?

最佳答案

变量 $/指最近的匹配,而变量 指最近的最外层匹配。在像上面这样的大多数基本正则表达式中,这可能是相同的。但是从 .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 - 直到捕获 block 结束时才更新。)

换句话说, 将始终引用您的最终匹配对象(即 $final = $text ~~ $regex ),因此您可以像完成完整匹配后一样遍历正则表达式内部的复杂捕获树所以在上面的示例中,您可以这样做 $¢[0]引用第一场比赛, $¢[1]第二个等等。

在正则表达式代码块内, $/将指最直接的匹配。在上述情况下,这就是 ( ) 内部的匹配项。并且不知道其他匹配,也不知道匹配的原始开始:只是 ( ) 的开始堵塞。所以给出一个更复杂的正则表达式:
/ a $<foo>=(b $<bar>=(c)+ )+ d /

我们可以随时使用 $¢ 访问所有 foo通过说 $¢<foo> 代币.我们可以访问 bar给定 foo 的 token 通过使用 $¢<foo>[0]<bar> .如果我们在 foo 中插入一个代码块的捕获,它将能够访问 bar使用 $<bar> 的 token 或 $/<bar> ,但无法访问其他 foo s。

关于regex - 正则表达式中的 $/和 $¢ 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61451103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com