Akihiro's Programmer Blog

Technology Notes for Personal

「初めてのPerl」 第七章

第七章から。

ここから正規表現の世界に入る。
何かTip集っぽくなってきた。




第七章 正規表現の世界

用語集

正規表現 Perlではパターンと呼ばれる。無限集合の文字列をマッチするかしないかに分ける。
メタキャラクタ 特殊文字。.とか*とか?とか。
キャプチャグループ ()で囲ったもの。複数文字にまとめてメタキャラクタを適用出来たり、使い回せたり便利。
文字クラス []で囲ったもの。ある種類の文字にマッチさせたい時とかに便利。




Point


#abcという文字列があるか判断するには
$_ = "bcabca cabcbac";

if (/abc/) {
    print "OK!";
}

#パターンを/..../で囲んで指定する


  • 特殊な指定がしたい。
#ある1文字にマッチする
$_ = "abbbbc";
if (/a....c/) {
    print "OK!";
}

#直前の文字を繰り返す
$_ = "abbbbc";
if (/ab*c/) {        #*は直前の文字を0回以上繰り返す
    print "OK!";
}

if (/ab+c/) {        #+は直前の文字を1回以上繰り返す
    print "OK!";
}

#直前の文字がある場合と無い場合でマッチする
$_ = "abc";
if (/ab?c/) {        #abcでもacでもマッチする
    print "OK!";
}

#グルーピングして使い回す
$_ = "abc axc";
if (/(a.c) \1/) {    #/a.c a.c/と同義
    print "OK!";
}

$_ = "abba";
if (/(a)(b)\2\1/) {  #/abba/と同義
    print "OK!";
}


  • 複数指定文字列のどれかにマッチさせたい。
$_ = "abc";

if (/aaa|bbb|ccc|abc/) {
    print "OK!";
}

#最後のabcにマッチする


  • 指定した文字のいずれかにマッチさせたい。
$_ = "abc";

if (/a[abcdefg]c/) {
    print "OK!";
}

#[]で囲むとそのどれかにマッチしていれば良い
#これを文字クラスと呼ぶが、Perlには文字クラスのショートカットが存在する

$_ = " x0x ";

if (/ x[\d]x /) {     # x[数字]x にマッチする
    print "OK!";
}

if (/[\s]x0x[\s]/) {  #[空白文字]x0x[空白文字]にマッチする
    print "OK!";
}

#ちなみに大文字にすると否定になる

if (/ [\D]0[\D] /) {  # [非数字]0[非数字] にマッチする
    print "OK!";
}

#後はワード文字を表す[\w]があるが、説明すると長いので割愛する
#めんど(ry




次回は

次回は第八章を予定。