带括号的匹配作为数组(Perl)

Joe*_*Fan 3 regex perl

我似乎记得有访问在Perl正则表达式(即括号匹配的方式$1,$2,$3等)的数组,但现在我似乎无法找到.无论是@+@-是我的意思.

编辑: 我应该添加我想在s///(替换)中访问此数组,如下所示:

s/(foo)(bar)+(baz)/mySubst(@!)/e;
Run Code Online (Sandbox Code Playgroud)

(如果@!我正在寻找阵列)

Eri*_*rom 5

我不知道有一个内置的魔术数组,它包含所有带括号的组,但这并不能阻止你制作一个:

{package Match::Parens;
    sub TIEARRAY {bless []}
    sub FETCH {no strict 'refs'; ${$_[1] + 1}}
    sub FETCHSIZE {$#+}
    tie @!, __PACKAGE__;
}

sub mySubst {join ', ' => map ucfirst, @_}

my $str = 'foobarbarbaz';

$str =~ s/(foo)(bar)+(baz)/mySubst(@!)/e;

say $str;  # prints 'Foo, Bar, Baz'
Run Code Online (Sandbox Code Playgroud)

这里我们声明Match::Parens将是@!带有tie 的数组的新实现.每次访问它时,它都会在该索引处查找当前匹配项.当前的实现从0开始,就像数组一样,您可能希望将其更改为从$1, $2, $3vars开始.