m, s のオプション
m/interesting/i
g | マッチする全ての文字列を対象とする。これがないと,マッチングは一度のみ,置換の場合は最初にマッチするものしか置換しない。
|
s/internet/Internet/ig
s | 文字列を単一行として扱う。途中に [改行] (\n) があっても,その前後は $ や ^ にマッチしない。s を指定すると,. (ピリオド) は \n にマッチするようになる。
|
m/\.$/s
m | 文字列を複数行として扱う。途中に [改行] があれば,その前後は $ や ^ にマッチする。
|
m/\.$/m
x | 空白類を無視する。(ただし,文字集合中の空白類と \ によりエスケープされた空白類は有効。) 空白類を無視するので,1行で書くと長くなって見づらいものも,適当に改行やスペースを入れて読みやすくできる。
|
1行で書くとこんなふうになってしまうものも...
m/\bchances? ((for (\S+ ){1,5}?)?(not )?to\b|of (\S+ ){0,5}?\S+ing\b|that\b)/
こんなふうに書くことが可能になる。
m/
\bchances?\ #chance の後に,
( (for\ (\S+\ ){1,5}?)? (not\ )? to\b #不定詞 (for+主語はなくてもよい)
| of\ (\S+\ ){0,5}? \S+ing\b #または of + 動名詞
| that\b #または that 節が
) #続くもの
/x
スペースを挿入したり改行したりして,見やすいようにレイアウトしていること,無視してはいけないスペースには \ を付けていること,# を使ってコメントを書き加えている点に注意。
e | s 演算子のオプション。置換文字列部分を式として評価して,その値で置き換える。(sprintf → Lesson 3, split → Lesson 6)
|
#数字は全て値を1大きいものに置換
s/\d/$& + 1/eg;
#\に続く数字の値を1.05倍する
s/\\(\d+)/'\\' . ($1 * 1.05)/eg;
#「時:分:秒」の形式の時刻表示の数字を2桁に揃える
s/\b\d\d?:\d\d?:\d\d?\b/sprintf "%02d:%02d:%02d", split(':', $&)/eg;