我使用perl6正则表达式匹配长度最小的重复任意字符序列。
阅读完https://docs.perl6.org/language/regexes#Capture_numbers并调整给出的示例后,我使用“外部变量”提出了以下代码:
#uses an additional variable $c
perl6 -e '$_="bbaaaaawer"; /((.){} :my $c=$0; ($c)**2..*)/ && print $0';
#Output: aaaaa
Run Code Online (Sandbox Code Playgroud)
为了帮助说明我的问题,在perl5中使用了类似的正则表达式:
#No additional variable needed
perl -e ' $_="bbaaaaawer"; /((.)\2{2,})/ && print $1';
Run Code Online (Sandbox Code Playgroud)
有人可以启发我“储蓄” $0到$c空缺的需求/好处{}吗?是否有匹配的替代(更好/类似)的perl6正则表达式?
提前致谢。
如何在前瞻断言中使用捕获组?
这段代码:
say "ab" ~~ m/(a) <?before (b) > /;
Run Code Online (Sandbox Code Playgroud)
返回:
?a?
0 => ?a?
Run Code Online (Sandbox Code Playgroud)
但我期待也能捕获'b'。
有没有办法这样做?
我不想将 'b' 留在前瞻之外,因为我不想让 'b' 成为比赛的一部分。
有没有办法捕获“b”但仍将其留在比赛之外?
笔记:
我尝试使用 Raku 的捕获标记,如下所示:
say "ab" ~~ m/<((a))> (b) /;
?a?
0 => ?a?
1 => ?b?
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有像我期望的那样工作,因为即使 'b' 被留在比赛之外,正则表达式已经处理了'b'。而且我也不想被处理。
例如:
say 'abab' ~~ m:g/(a)<?before b>|b/;
(?a?
0 => ?a?
?b?
?a?
0 => ?a?
?b?)
# Four matches (what I want)
say 'abab' ~~ m:g/<((a))>b|b/;
(?a?
0 => ?a?
?a?
0 => ?a?)
# …Run Code Online (Sandbox Code Playgroud)