「Perlの絵本」
著者 アンク
評価 ★★★★
perlにはメタ文字を使って文字列から語句を検索したり、変換・置換できる。
メタ文字
.
任意の一文字
*
0回以上の繰り返し
+
1回以上の繰り返し
?
0回または1回の繰り返し
~
先頭
$
末尾
|
選択
()
正規表現のループ
[]
文字クラス
{n}
n回の繰り返し
{n,}
n回以上繰り返し
{n,m}
n回以上m回以下の繰り返し
\
メタ文字を文字として表示
マッチ…文字列の中に指定の語句があるかどうかを調べること
マッチするかどうかを調べる
=^
!~
パターンは//ではさむ
/パターン/
例
$result=”Lets study perl”=~ /perl/;
マッチしたら1しなかったらundef
$_ =~は省略可能
繰り返す回数が決まっていないメタ文字(+、*、?、{n,}、{n,m})はそのままだともっとも長い文字列がマッチします
これらのメタ文字後ろに?をつけると、最短マッチ
マッチした後に変数$&にマッチした文字列が格納されます
パターンのグループ
パターンの一部にマッチした文字列を参照したい場合グループ化を使います
パターンの一部のマッチした文字列は$1、$2、$3、…に左から順に格納される
例
$r=”I love cat and dog” =~ /love(.+)and(.+)/;
print $1 . “\n”;
print $2 . “\n”;
print $& . “\n”;
結果
cat
dog
love cat and dog
特殊変数
$&
マッチした文字列全体
$’
マッチした部分より前
$”
マッチした部分より後
$1、$2、$3、…
1番目、2番目、…のグループにマッチした文字列
$+
最後のグループにマッチした文字列
マッチ演算子
/~/、m/~/
マッチ演算子のオプション
/~/g
マッチするものすべてを見つける
下のようにすることでマッチしたすべての文字列を配列に保存できる
@a=$str=~/~/
/~/i
大文字と小文字を区別しない
/~/m
文字列を複数行として扱う
/~/s
文字列を単一行として扱う
/~/x
パターン内に含まれる半角スペースを無視する
置き換え演算子s/~/~/
$result = $str =~ s/dog/cat/
文字列strの中のdogをcatに変換して、成功したら$resultに1を入れます
置き換え演算子のオプション
s/~/~/e
変換後の文字列を式とみなす
s/~/~/g
マッチするものをすべて見つける
s/~/~/i
大文字と小文字を区別しない
s/~/~/m
文字列を複数行として扱う
s/~/~/s
文字列を単一行として扱う
s/~/~/x
パターン内に含まれる半角スペースを無視
tr/~/~/
一文字ずつ文字を置き換える
例
tr/a-z/A-Z/
小文字から大文字に変換
変換演算子のオプション
tr/~/~/c
変換対象の文字列に含まれない文字を削除する
tr/~/~/d
変換後の文字列に含まれない文字を削除する
tr/~/~/s
連続文字を一文字に変換する