在 perl 中,*
通常是贪婪的,除非你?
在它之后添加一个。但是,当*
用于对付一个群体时,情况似乎有所不同。我的问题是“为什么”。考虑这个例子:
my $text = 'f fjfj ff';
my (@matches) = $text =~ m/((?:fj)*)/;
print "@matches\n";
# --> ""
@matches = $text =~ m/((?:fj)+)/;
print "@matches\n";
# --> "fjfj"
在第一场比赛中,perl 懒惰地不打印任何内容,尽管它可能匹配了一些东西,如第二场比赛所示。奇怪的是,*
当组的内容只是.
而不是实际字符时, 的行为正如预期的那样贪婪:
@matches = $text =~ m/((?:..)*)/;
print "@matches\n";
# --> 'f fjfj f'
- 注意:以上是在 perl 5.12 上测试的。
- 注意:无论我对内部组使用捕获括号还是非捕获括号都没有关系。