最短一致


 HTMLファイルからタグ( < と > で囲まれた部分)を削除するために s/<.*>//g; と書くと、タグが複数あった場合にその間の文字がすべて消えてしまいます。
 これはPerlの数量子( * や + など)が通常では最長一致とするためです。最長一致なので .* の部分が最初の < と最後の > の間の文字にマッチしてしまいます。
 そこで、最長一致ではなく最短一致を使うようにします。最短一致にする場合には数量子の後ろに ? を付けます。すると .* の部分が最初の < と最初の > にマッチすることになるので、間の文字は消えずに残ります。
# 最短一致の例
my $str = 'aaabbb';
my $str2 = $str;

$str =~ s/a+/1/;
$str2 =~ s/a+?/1/;

print "[$str]\n";	# 1bbb
print "[$str2]\n";	# 1aabbb

# タグ削除の例
my $title = '<title>ホームページ</title>';
my $title2 = $title;

$title =~ s/<.*>//g;
$title2 =~ s/<.*?>//g;

print "[$title]\n";	# 何も出ない
print "[$title2]\n";	# ホームページ と出る

関連項目

指定回繰り返しに一致