Perl 使用正则表达式获取重叠匹配

Perl 使用正则表达式获取重叠匹配,perl,Perl,请参见代码优先plz~ 这是perl代码 my $st = 'aaaa'; while ( $st =~ /aa/g ) { print $&, "\n"; } 我想移动绳子的一点 所以我想要三个aa的结果 然而,只得到了两个结果 我能得出三个结果吗 my $st = 'aaaa'; my $find = 'aa'; while($st =~ /$find/g){ print $&,"\n"; pos($st) -= (length($find)-1

请参见代码优先plz~

这是perl代码

my $st = 'aaaa';

while ( $st =~ /aa/g ) {
    print $&, "\n";
}
我想移动绳子的一点

所以我想要三个
aa
的结果

然而,只得到了两个结果

我能得出三个结果吗

my $st = 'aaaa';
my $find = 'aa';

while($st =~ /$find/g){
    print $&,"\n";
    pos($st) -= (length($find)-1);
}

返回问题变量上次m//g搜索停止的位置的偏移量(未指定变量时使用$)

此外,
pos()

返回问题变量上次m//g搜索停止的位置的偏移量(未指定变量时使用$)


另外,
pos()
是,其结果可以像变量一样更改。

使用前瞻。它不会提升职位:

my $st = 'abcd';

while ($st =~ /(?=(..))/g) {
    print "$1\n";
}

我使用了不同的字符串来显示匹配的位置。

使用前瞻。它不会提升职位:

my $st = 'abcd';

while ($st =~ /(?=(..))/g) {
    print "$1\n";
}

我使用了一个不同的字符串来显示匹配的位置。

以下内容可以实现此目的:

while ($st =~ /(?=(aa))/g) {
   print "$1\n";
}

以下内容将实现此目的:

while ($st =~ /(?=(aa))/g) {
   print "$1\n";
}

您的问题是正则表达式通常不允许重叠匹配

您可以通过输出当前两个匹配项的:

my $st = 'aaaa';

while ( $st =~ /aa/g ) {
    print "pos $-[0] - $&\n";
}
产出:

pos 0 - aa
pos 2 - aa
pos 0 - aa
pos 1 - aa
pos 2 - aa
要解决此问题,只需使用和显式:

产出:

pos 0 - aa
pos 2 - aa
pos 0 - aa
pos 1 - aa
pos 2 - aa

您的问题是正则表达式通常不允许重叠匹配

您可以通过输出当前两个匹配项的:

my $st = 'aaaa';

while ( $st =~ /aa/g ) {
    print "pos $-[0] - $&\n";
}
产出:

pos 0 - aa
pos 2 - aa
pos 0 - aa
pos 1 - aa
pos 2 - aa
要解决此问题,只需使用和显式:

产出:

pos 0 - aa
pos 2 - aa
pos 0 - aa
pos 1 - aa
pos 2 - aa