Perl 正则表达式中捕获组的最大数量

Arj*_*jun 3 regex perl grouping

给定 perl 中的正则表达式,如何找到该正则表达式中捕获组的最大数量?我知道我可以使用 $1、$2 等来引用第一个、第二个等捕获的组。但如何找到此类组的最大数量呢?通过捕获的组,我的意思是与括号中的正则表达式匹配的字符串。例如:如果正则表达式是 (a+)(b+)c+,则字符串“abc”与该正则表达式匹配。第一个捕获组的价格为 1 美元,第二组的价格为 2 美元。

mob*_*mob 5

amon当他提到哈希时暗示了这个问题的答案%+。但你需要的是@+数组:

@+

该数组保存当前活动动态范围中最后一个成功子匹配末尾的偏移量。$+[0] 是整个匹配末尾的字符串偏移量。这与 pos 函数在匹配的变量上调用时返回的值相同。该数组的第 n 个元素保存第 n 个子匹配的偏移量,因此 $+ 1是 $1 结束处的偏移量,$+[2] 是 $2 结束处过去的偏移量,依此类推。您可以使用 $#+ 来确定上次成功匹配中有多少个子组。请参阅 @- 变量给出的示例。[强调添加]

$re = "(.)" x 500;
$str = "a" x 500;
$str =~ /$re/;
print "Num captures is $#+";      #  outputs "Num captures is 500"
Run Code Online (Sandbox Code Playgroud)