我应该如何在预查表达式中使用捕获组?
这段代码:
say "ab" ~~ m/(a) <?before (b) > /;
返回值:
「a」
0 => 「a」
但是我希望也能捕获 'b'。
有没有办法做到这一点?
我不想让'b'被排除在lookahead之外,因为我不想让'b'成为匹配的一部分。
有没有办法捕获 'b',但仍然让它保持在匹配之外?
注意:
我试图使用Raku的 capture markers,如下所示:
say "ab" ~~ m/<((a))> (b) /;
「a」
0 => 「a」
1 => 「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」)
# Two matches
<(
和)>
,例如<(a)>
而不是<((a))>
,请参见:https://docs.raku.org/language/regexes#Capture_markers:_%3C(_)%3E)。 - jubilatious1