gpt4 book ai didi

regex - Perl Regex - 获取所有匹配项的偏移量而不是一个

转载 作者:行者123 更新时间:2023-12-04 19:14:30 24 4
gpt4 key购买 nike

我想在文件中搜索一个字符串,然后获取所有匹配项的偏移量。
文件内容如下:

sometext
sometext
AAA
sometext
AAA
AAA
sometext

我正在将整个文件读入一个字符串 $text然后为 AAA 进行正则表达式匹配如下:
if($text =~ m/AAA/g) {
$offset = $-[0];
}

这将仅提供一个 AAA 的偏移量.如何获得所有匹配项的偏移量?

我知道我们可以使用这样的语法获取数组中的所有匹配项:
my @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;

但是有没有更简单的方法呢?

最佳答案

您已经知道应该使用 $-[0] !代替

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 ";
}


while ($text =~ /($regex)/gi){
push @matches, "$1 found at $-[0]";
}

也就是说,我非常喜欢将计算与输出格式分开,所以我会这样做
while ($text =~ /($regex)/gi){
push @matches, [ $1, $-[0] ];
}

PS——除非你展开了一个while循环, if (/.../g)没有意义。充其量, /g什么也没做。更糟糕的是,您会得到错误的结果。

关于regex - Perl Regex - 获取所有匹配项的偏移量而不是一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11439952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com