「perl/regex」の編集履歴(バックアップ)一覧はこちら
「perl/regex」(2011/07/18 (月) 22:40:06) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*正規表現
**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オプション
--同じ文字が繰り返されている場合にそれをマージする。
*正規表現
**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;