正規表現
m演算子
mからはじまるマッチング。検索パターンの指定に使う。
m/regex/[修飾子]
mの修飾子の種類
i |
大文字と小文字を区別しない |
m |
文字列を複数行として扱う。(^と$が改行ごとにマッチする) |
o |
パターンのコンパイルを一度しか行わない |
s |
文字列を単一行として扱う。(^と$が最初と最後にしかマッチしない) |
x |
拡張正規表現をつかう。(空白を無視するようになる。エスケープと[ ]以外) |
g |
すべてのマッチを行う。配列でとればマッチしたものがとれ、スカラでとれば、true or falseがとれる |
mの後をスラッシュ/以外にすれば、それがデリミタとなります。
逆にデリミタを変えないのであれば、mはいらない。
s演算子
sからはじまるマッチング。置換処理に使う。
これもデリミタの変更OK。
s/regex/replaceto/[修飾子]
sの修飾子の種類
e |
replacetoの式を評価する(足し算とか) |
i |
大文字と小文字を区別しない |
m |
文字列を複数行として扱う。(^と$が改行ごとにマッチする) |
o |
パターンのコンパイルを一度しか行わない |
s |
文字列を単一行として扱う。(^と$が最初と最後にしかマッチしない) |
x |
拡張正規表現をつかう。(空白を無視するようになる。エスケープと[ ]以外) |
g |
マッチしたものをすべて置換する |
s演算子を使って、こんなこともOK。
perl -ne 'print if s/ABC/DEF/;' names.txt
ABCにマッチするかどうかのif文にしておいて、printさせるのはDEFに置換後という技。
パターン照合演算子
$hoge =~ /abc/ |
$hogeがabcを含むかどうかの条件式 |
$hoge !~ /abc/ |
$hogeがabcを含まないかどうかの条件式 |
$hoge =~ s/abc/def/ |
$hogeのabcをdefに置換 |
暗黙的にこれらは使っていた。
/abc/ が $_ ~= /abc/ と同じ意味だった。
tr, y
trとyは同じ。
置換文字列の文字を1つずつ置換する。
返り値は置換した文字数。
- dオプション
- cオプション
- マッチングの意を逆に。マッチング条件にあてはまらないものを置換する。
- sオプション
- 同じ文字が繰り返されている場合にそれをマージする。
tr/a-z/A-Z/; print;
tr/ //d; print;
tr/0-9/*/c; print;
tr/:/:/s; print;
最終更新:2011年07月18日 22:40