s/PATTERN/REPLACE/egimosx
検索文字PATTERN
を使ってパターンを検索し、もし見つかれば、置換文字REPLACE
で置き換え、置換した数を返します。見つからなければ、"偽"を返します。
=~
演算子などによって文字列が指定されていなければ、$_
が使われます。
スラッシュ( / )の区切り文字以外にも、英数字、空白ではない任意の文字が使えます。シングルクォート( ` )を使うと置換文字列での展開はされません。バッククォートを使うと、置換文字列をコマンドとして実行して、その出力が実際の置換文字列に使われます。PATTERN
をカッコ類で括った場合には、REPLACE
用にもう一組の区切り文字を用意します。
sの使い方
# スラッシュ( / )以外の区切り文字を使う $path =~ s|/usr/bin|/usr/local/bin|; # カッコ類も可 $path =~ s(/usr/bin)(/usr/local/bin);
PATTERN
やREPLACE
の文字列に変数を含めると、文字列として展開されます。
$num = '[0-9]+'; $str = "test 1 2 3"; $str =~ s/$num//gxo; print $str, "\n"; > test
s/// 演算子の応用
g
オプションを使って繰り返し置換
s/<[^>]+>/ /g;
置換した値を他の変数に代入
$str = "if you aint runnin game.\n"; ($str2 = $str) =~ s/aint/are not/; print $str, $str2; > if you aint runnin game. > if you are not runnin game.
マッチしたパターンの順番を入れ替える
$str = "back Looking"; $str =~ s/([^ ]*) *([^ ]*)/$2 $1/; # 最初の 2 語の入れ替え print $str, "\n";s > Looking back
s/// 演算子用のオプション
オプション | 意味 |
---|---|
e | 式の右側の評価を行なう |
ee | 式の右側の評価を行い、実行後の返却値を再度評価する |
g | 繰り返し置換 |
i | 大文字、小文字を区別しないで検索 |
m | 文字列を複数行として扱う |
o | パターンのコンパイルを 1 度だけにする |
s | ワイルドカードのドット( . )が改行にもマッチするようにする |
x | 拡張正規表現を使用する |
e オプション-REPLACE を式として評価
e オプションは置換文字列を式として解釈し、eval
します。
s/\d+/sprintf("%02d",$&)/e; # マッチした文字列を sprintf で整形 s/^=(\w+)/&func($1)/e; # サブルーチン呼び出しを使う
その他のオプションについては m// 演算子を参照してください。