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

use*_*456 7 raku

Raku 在交替捕获组上的行为如何与 Perl 正则表达式的行为一样,例如

\n
> 'abefo' ~~ /a [(b) | (c) (d)] (e)[(f)|(g)]/\n\xef\xbd\xa2abef\xef\xbd\xa3\n 0 => \xef\xbd\xa2b\xef\xbd\xa3\n 2 => \xef\xbd\xa2e\xef\xbd\xa3\n 3 => \xef\xbd\xa2f\xef\xbd\xa3\n
Run Code Online (Sandbox Code Playgroud)\n

需要是“通常的”Perl 正则表达式结果(让索引系统保持 Raku):

\n
 $0 = 'b'\n $1 = undef\n $2 = undef \n $3 = e\n $4 = f\n
Run Code Online (Sandbox Code Playgroud)\n

请给予有用的指导。

\n

rai*_*iph 7

引用概要 5:正则表达式和规则设计推测文档:

\n
\n

仍然可以模仿单调的 Perl 5 捕获索引语义

\n
\n

插入 a$3=(e)

\n
/ a [ (b) | (c) (d) ] $3=(e) [ (f) | (g) ] /\n\nandthen say \'abefo\' ~~ $_\n\n\xef\xbd\xa2abef\xef\xbd\xa3\n 0 => \xef\xbd\xa2b\xef\xbd\xa3\n 3 => \xef\xbd\xa2e\xef\xbd\xa3\n 4 => \xef\xbd\xa2f\xef\xbd\xa3\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

因此,也许我们应该提交文档问题来提及这一点,大概是在捕获数字$ ($1, $2, ...)中。

\n


jub*_*us1 5

不清楚这个问题,但肯定回到 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