Perl 使用正则表达式获取重叠匹配
请参见代码优先plz~ 这是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
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