交替捕获组的 Raku 行为如何与 Perl 相同

How can the Raku behavior on capturing group in alternate be the same as Perl

Raku 交替捕获组的行为如何才能像 Perl 正则表达式一样,例如

> 'abefo' ~~ /a [(b) | (c) (d)] (e)[(f)|(g)]/
「abef」
 0 => 「b」
 2 => 「e」
 3 => 「f」

需要'usual' Perl正则表达式结果(让索引系统保持Raku):

 [=11=] = 'b'
  = undef
  = undef 
  = e
  = f

请多多指教

引用 Synopsis 5: Regexes and Rules 设计推测文档:

it is still possible to mimic the monotonic Perl 5 capture indexing semantics

(e) 插入 =:

/ a [ (b) | (c) (d) ] =(e) [ (f) | (g) ] /

andthen say 'abefo' ~~ $_

「abef」
 0 => 「b」
 3 => 「e」
 4 => 「f」

我曾在文档中简单地查找过对此的提及,但没有看到。

所以也许我们应该提交 doc issues 来提及这一点,大概在 Capture numbers and $ (, , ...).

不清楚这个问题,但肯定回到 Perl5 语义与 Raku 意味着改变交替运算符。

Perl5 的 | 交替运算符是“第一个匹配的选择”获胜的运算符。 Raku 中的等效交替运算符是 ||.

Raku 的 | 交替运算符执行最长令牌匹配 (LTM),(这大致意味着如果您按 | 分隔备选方案,则可以花费更少的时间按最长令牌对它们进行排序以获得期望的结果)。

https://docs.raku.org/language/regexes#Alternation:_||
https://docs.raku.org/language/regexes#Longest_alternation:_|

(至于捕获编号,也许您可​​以提交由 :Perl5:P5 正则表达式副词处理的请求?请参阅:https://docs.raku.org/language/regexes#Perl_compatibility_adverb