perl では、後に*
a を追加しない限り、通常貪欲です?
。*
ただし、グループに対して使用される場合、状況は異なるようです。私の質問は「なぜ」です。次の例を検討してください。
my $text = 'f fjfj ff';
my (@matches) = $text =~ m/((?:fj)*)/;
print "@matches\n";
# --> ""
@matches = $text =~ m/((?:fj)+)/;
print "@matches\n";
# --> "fjfj"
最初の一致では、perl は遅延して何も出力しませんが、2 番目の一致で示されているように、何かに一致した可能性があります。奇妙なことに、グループの内容が実際の文字で*
はなく単なるものである場合、 の動作は期待どおり貪欲です。.
@matches = $text =~ m/((?:..)*)/;
print "@matches\n";
# --> 'f fjfj f'
- 注: 上記は perl 5.12 でテストされています。
- 注:グループ内にキャプチャまたは非キャプチャ括弧を使用するかどうかは関係ありません。