在 Perl 中,命名捕获组可用于使用正则表达式从字符串中提取数据:
perl -wle '
use Data::Dumper;
"abc" =~ / (?<B> (?<A> a ) b ) c /x and print "match!";
print Dumper(\%+);
'
印刷
match!
$VAR1 = {
'B' => 'ab',
'A' => 'a'
};
但是如何获得匹配项 A 和 B 在字符串中的位置"abc"
?使用未命名的捕获组时,可以引用正则表达式变量@-
and @+
,但这不适用于命名组 (*)。
(*) '不起作用'是指我不能使用捕获组的名称来检索位置,而只能使用组的编号(例如$-[1]
,对于组 A 的起始位置,但不是类似的东西$START_POS{A}
)。这减少了命名捕获组的使用,如果事先不知道捕获组的顺序,甚至可能无法使用。