例如我有一个字符串" babdbeb"和模式" b.b"。我想在这里找到以下子串:
bab
bdb
beb
这样做的最佳方式是什么?
P.S。我对Perl编程很陌生。
答案 0 :(得分:4)
您可以使用超前模式,请参阅perlre
while ("babdbeb" =~ m/b(?=(.b))/g) {
print "b$1\n";
}
这会产生不带前导b
的匹配,但允许重新启动搜索并找到中间b.b
s
答案 1 :(得分:4)
您可以使用正向前瞻断言来使用重叠的正则表达式匹配。这是一个例子:
$\ = $/; ## adding \n after every print.
my $string = "babdbeb";
print for $string =~ /(?=(b.b))/g;
输出:
bab
bdb
beb
答案 2 :(得分:4)
my $s = "babdbeb";
while ($s =~ /(b.b)/g) {
print "$1\n";
# decrease position where search left of by 2 (3 is length of 'b.b' -1)
# pos() is lvalue function http://perldoc.perl.org/functions/pos.html
pos($s) -= (length($1) -1);
}
输出
bab
bdb
beb