
170
9 章 正規表現によるテキスト処理
9.5
より強力な正規表現機能
これまでに(ほぼ)
3
章を費やして正規表現を紹介してきました。正規表現が
Perl
のコアとな
る強力な機能であることを実感できたはずです。しかし
Perl
の開発者たちは、さらに多くの機能
を追加しています。この節では、そのうち最も重要なものをいくつか紹介しましょう。またそれと
ともに、正規表現エンジンの内部動作について、もう少し詳しく説明を加えます。
9.5.1
欲張りでない量指定子
これまでに登場した量指定子は、すべてが欲張り(
greedy
)なものでした。欲張りな量指定子
は、最左最長のルールに従って、できるだけ長い部分にマッチしようとします。時には、マッチし
すぎることがあります。
次の例を考えてみましょう。この例ではタグの間に置かれている名前を、すべて大文字に置き換
えようとしています。
my $text = '<b>Fred</b> and <b>Barney</b>';
$text =~ s|<b>(.*)</b>|<b>\U$1\E</b>|g;
print "$text\n";
これはうまく動かず、次のように表示します。
<b>FRED</B> AND <B>BARNEY</b>
何が起こったのでしょうか。グローバルマッチを行い、
2
回マッチするはずです。実際には何回
マッチしたのか表示してみましょう。
my $text = '<b>Fred</b> and <b>Barney</b>';
my $match_count = $text ...