加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:36:27 所属栏目:百科 来源:网络整理
导读:我似乎记得有一种方法可以访问Perl中的正则表达式的括号匹配(即$1,$2,$3等)作为数组,但现在我似乎无法找到它. @和@都不是我的意思. 编辑: 我应该补充一点,我想在s ///(替换)中访问这个数组,如下所示: s/(foo)(bar)+(baz)/mySubst(@!)/e; (如果@!是我正在
我似乎记得有一种方法可以访问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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读