liv*_*e75 5 regex perl capturing-group
正则表达式中的捕获组数量是否有限制?我曾经认为它是 9 ($1 ... $9),但在 perlre 文档中没有找到任何内容来证实这一点。事实上,下面的代码显示至少有 26 个。
#!/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";
Run Code Online (Sandbox Code Playgroud)
请注意,这个问题: How much capture groups aresupported by PCRE2 replacement function仅指PCRE2 C库。我问的是 Perl。
为什么不直接测试一下呢。具有 2000 万次捕获的正则表达式对于任何人来说都应该足够了。让我觉得记忆力是这里的极限。在我装有 Perl v5.30 的旧笔记本电脑上,这花了 25 秒:
my $n = 20_000_000; # 20 million
my $re = join"", map "(.)", 1..$n; # create regexp with 20 million captures
my $str = "ABC" x $n; # create a more than long enough string
$str =~ /$re/; # match & capture
print $19999987, "\n"; # print the "A" in capture var number 19999987
print ${^CAPTURE}[19999987-1],"\n"; # same
print "Length: ".@{^CAPTURE}."\n"; # prints 20000000, length of array
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |