perl - 如何找到模式的所有巧合

时间:2014-04-08 16:09:34

标签: regex perl

例如我有一个字符串" babdbeb"和模式" b.b"。我想在这里找到以下子串:

bab
bdb
beb

这样做的最佳方式是什么?

P.S。我对Perl编程很陌生。

3 个答案:

答案 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