我如何在回顾断言中使用捕获组?
我尝试使用与这个答案相同的公式。但这似乎在回顾断言中无法工作。
从概念上讲,这就是我试图做的事情。
say "133" ~~ m/ <?after $0+> (\d) $ /
我知道这可以很容易地实现,没有使用回顾后发表达式,但现在先忽略这一点 :)
为此,我尝试了以下选项:
使用 :var
语法:
say "133" ~~ m/ <?after $look-behind+> (\d):my $look-behind; $ /;
# Variable '$look-behind' is not declared
使用代码块
语法,在外部定义变量:
my $look-behind;
say "133" ~~ m/ <?after $look-behind+> (\d) {$look-behind=$0} $ /;
# False
似乎问题出在
lookbehind
在执行 "code block/:my $var" 之前,因此变量对于固定后面的内容没有值。是否有办法在 lookbehind 中使用捕获组?
say .<after> given foo ~~ m/ $ <after bar> /
对于以模式bar
结尾的foo
中的任何字符串都有效,这是公平的...并显示一个捕获,该捕获是foo
中的字符串整个(不仅仅是bar
)并且完全翻转(倒序)! - raiph/ (a) :my $lookahead; <?before b {$lookahead = $/}> /
)的答案,将其简单转换为解决此Q的lookbehind版本将是/ (a) :my $lookbehind; { $lookbehind = $/ } <?after $lookbehind ** 2> $ /;
。(这与.@WiktorStribiżew的答案差不多。) - raiph