まくまくPerlノート
欲張りな量指定子と欲張りでない量指定子による文字列マッチング
2008-03-11

欲張りな量指定指定子 (+, *)

量指定子の +* は、欲張り (greedy) なので、できるだけ多くの範囲にマッチしようとします。

例: 欲張りな量指定子 (+)

my $line = 'This is a bookable book.';
$line =~ s/(This.+book)/[$1]/;
print $line, "\n";

実行結果

[This is a bookable book].

欲張りでない量指定子 (+?, *?)

+* の代わりに、+?*? を使うようにすると、できるだけ短い範囲でマッチしてくれます。

例: 欲張りでない量指定子 (+?)

my $line = 'This is a bookable book.';
$line =~ s/(This.+?book)/[$1]/;
print $line, "\n";

実行結果

[This is a book]able book.
2008-03-11