March 2025
Beginner to intermediate
398 pages
5h 33m
Japanese
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
正規表現を使ってテキストを変更することもできる。これまではパターンマッチングの方法だけを紹介してきたが、これからはパターンを使って文字列の変更したい部分を見つける方法を紹介しよう。
m// パターン・マッチをワープロの「検索」機能のように考えるなら、「検索と置換」機能はPerlの 置換演算子のようなものだろう。これは単純に、パターンにマッチした変数部分を置換文字列で置き換えるだけである:s///
$_ = "He's out bowling with Barney tonight."; s/Barney/Fred/; # Replace Barney with Fred print "$_\n";
どのような文字列式にもマッチするm// とは異なり、s///は、lvalue として知られるものに含まれなければならないデータを変更する。これは、ほとんどの場合変数であるが、代入演算子の左側で使用できるものであれば何でもよい。
マッチに失敗した場合は何も起こらず、変数はそのままである:
# Continuing from previous; $_ has "He's out bowling with Fred tonight." s/Wilma/Betty/; # Replace Wilma with Betty (fails)
もちろん、パターンも置換文字列ももっと複雑にすることもできる。ここでは、置換文字列はパターンマッチによってセットされる最初のキャプチャ変数、$1 を使っている:
s/with (\w+)/against $1's team/; print "$_\n"; # says "He's out bowling against Fred's team tonight."
以下は他の可能性のある置換である。現実の世界では、これほど多くの無関係な置換を連続して行うことは一般的ではないだろう:
$_ = "green scaly dinosaur"; s/(\w+) (\w+)/$2, $1/; # Now it's "scaly, green dinosaur" s/\A/huge, /; # Now it's "huge, scaly, green dinosaur" s/,.*een//; # Empty replacement: Now it's "huge dinosaur" s/green/red/; # Failed match: still "huge dinosaur" s/\w+$/($`!)$&/; # Now it's "huge (huge !)dinosaur" s/\s+(!\W+)/$1 /; # Now it's "huge (huge!) dinosaur" s/huge/gigantic/; # Now it's "gigantic (huge!) dinosaur"
s/// ;置換が成功した場合はtrue、そうでない場合はfalseとなる:
$_ = "fred flintstone";
if (s/fred/wilma/) {
print "Successfully replaced fred with wilma!\n";
}前の例でお気づきかもしれないが、s///、他の置換が可能であったとしても、1つだけ置換を行う。もちろん、これはデフォルトに過ぎない。 ...
Read now
Unlock full access