【发布时间】:2018-04-19 13:34:14
【问题描述】:
问题:我正在编写一个库,该库接收用户提供的正则表达式,其中包含要针对其他输入运行的未知数量的捕获组,并且我想提取连接在一个字符串中的所有捕获组的值(用于在其他地方进一步处理)。
如果事先知道捕获组的数量,这很简单,因为我只是指定它们:
#!/usr/bin/perl -w
my $input = `seq -s" " 100 200`;
my $user_regex =
qr/100(.*)103(.*)107(.*)109(.*)111(.*)113(.*)116(.*)120(.*)133(.*)140(.*)145/;
if ($input =~ $user_regex) { print "$1 $2 $3 $4 $5 $6 $7 $8 $9 $10\n"; }
正确生成(忽略多余的空格):
101 102 104 105 106 108 110 112 114 115 117 118 119
121 122 123 124 125 126 127 128 129 130 131 132
134 135 136 137 138 139 141 142 143 144
但是,如果有超过 10 个捕获组,如果我不修改代码,就会丢失数据。由于捕获组的数量未知,目前我在no warnings pragma 下使用数百个手动指定的匹配项(“$1”到“$200”)并希望它足够,但它似乎并不特别干净或 健壮。
理想情况下,我希望像 values %+ 那样对命名捕获组起作用,但对非命名捕获组起作用。在 perl 5.24 中可以吗?或者,您会推荐哪种不那么笨拙的方法来检索所有编号的捕获组的内容?
【问题讨论】: