Perl正则表达式中捕获组的数量是否存在限制?
Perl正则表达式捕获组数量是否存在限制?
Perl本身对正则表达式的捕获组数量没有固定的低限制(比如你之前误以为的9个),实际支持的捕获组数量远多于26个,具体上限仅受系统内存和Perl实现的限制,常规使用场景下完全无需担心数量不足。
你之前觉得只有9个捕获组的误解,大概率来自早期一些老旧的正则表达式实现(比如POSIX基本正则表达式),这类实现确实只支持$1到$9。但Perl的正则引擎完全突破了这个限制,$10及以上的捕获组都是合法的——不过要注意,直接写$10时Perl会解析为$1拼接字符0,引发歧义,所以引用10及以上的捕获组时,推荐用${10}的形式(你示例中的$24等能正常工作,是因为后面没有紧跟数字字符,所以不会触发歧义)。
你提供的代码可以验证这一点,运行后会正确输出对应位置的捕获内容:
#!/usr/local/bin/perl use strict; use warnings; my $line = " a b c d e f g h i j k l m n o p q r s t u v w x y z "; my $lp = "(\\w) "; my $pat = ""; for (my $i=0; $i<26; $i++) { $pat = $pat . $lp; } $line =~ /$pat/; print "$1 $2 $3 $24 $25 $26\n";
注:本次讨论仅针对Perl原生正则引擎,不涉及PCRE2等第三方正则库的情况。
内容的提问来源于stack exchange,提问作者livefree75
相关产品推荐
相关产品推荐

