正则表达式 – 带括号的匹配作为数组(Perl)

前端之家收集整理的这篇文章主要介绍了正则表达式 – 带括号的匹配作为数组(Perl)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我似乎记得有一种方法可以访问Perl中的正则表达式的括号匹配(即$1,$2,$3等)作为数组,但现在我似乎无法找到它. @和@都不是我的意思.

编辑:
我应该补充一点,我想在s ///(替换)中访问这个数组,如下所示:

s/(foo)(bar)+(baz)/mySubst(@!)/e;

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

解决方法

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

{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'

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

猜你在找的正则表达式相关文章