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

Perl Regex – 获取所有匹配的偏移而不是一个

发布时间:2020-12-16 06:25:14 所属栏目:大数据 来源:网络整理
导读:我想在文件中搜索字符串,然后获取所有匹配的偏移量. 文件内容如下: sometextsometextAAAsometextAAAAAAsometext 我正在将整个文件读入字符串$text,然后对AAA进行正则表达式匹配,如下所示: if($text =~ m/AAA/g) { $offset = $-[0];} 这将只给出一个AAA的偏
我想在文件中搜索字符串,然后获取所有匹配的偏移量.
文件内容如下:

sometext
sometext
AAA
sometext
AAA
AAA
sometext

我正在将整个文件读入字符串$text,然后对AAA进行正则表达式匹配,如下所示:

if($text =~ m/AAA/g) {
    $offset = $-[0];
}

这将只给出一个AAA的偏移量.如何抵消所有比赛?

我知道我们可以使用如下语法获取数组中的所有匹配项:

我的@matches =($text = ~m / AAA / g);

但我想要偏移不匹配的字符串.

目前我使用以下代码来获取所有匹配的偏移量:

my $text= "sometextAAAsometextAAA";
my $regex = 'AAA';
my @matches = ();

while ($text =~ /($regex)/gi){
    my $match = $1;
    my $length = length($&);
    my $pos = length($`);
    my $start = $pos + 1;
    my $end = $pos + $length;
    my $hitpos = "$start-$end";
    push @matches,"$match found at $hitpos ";
}

print "$_n" foreach @matches;

但有更简单的方法吗?

解决方法

我不认为在Perl中有一种内置的方法可以做到这一点.但是从 How can I find the location of a regex match in Perl?开始:

sub match_all_positions {
    my ($regex,$string) = @_;
    my @ret;
    while ($string =~ /$regex/g) {
        push @ret,[ $-[0],$+[0] ];
    }
    return @ret
}

(编辑:李大同)

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

    推荐文章
      热点阅读