Akihiro's Programmer Blog

Technology Notes for Personal

「初めてのPerl」 第八章 - 1

第八章から。

第八章 正規表現によるマッチ

内容

用語集

用語 説明
パターンマッチ演算子 前回の/xxx/はm/xxx/というパターンマッチ演算子のショートカット
マッチ修飾子 正規表現の動作を変化させる
アンカー パターンを文字列の特定の位置に固定する
結合演算子 =~で表現され、左側の文字列に右側のパターンをマッチさせる

Point

//はm//のショートカットだった
# 前回の//は
$_ = "abc";
if (/abc/) {
    print "OK!";
}

# 実はm//のショートカット
if (m/abc/) {
    print "OK!";
}

# ちなみに/(スラッシュ)はデリミタなので
if (m{abc}) {
    print "OK!";
}

if (m[abc]) {
    print "OK!";
}

# こう書けたりする
大文字小文字を区別せずにマッチさせる
# iというマッチ修飾子を付けると大文字小文字を区別しなくなる
$_ = "AbC";
if (/abc/i) {
    print "OK!";
}

if (/ABC/i) {
    print "OK!";
}
パターン内に空白文字を入れたい
# コメント等は空白文字として扱われるので
# 途中でコメントを入れたい場合等は末尾にxを付ける
$_ = "abc";
if 
(
/
a    # aだよ!
b    # bでゴンス!
c    # cだっピ!
/x
)
{
print "OK!";
}


# カオス
マッチ修飾子はまとめて指定出来る
# 単純に羅列すればOK
$_ = "AbC";
if
(
/
A    # この
B    # ロリコン
C    # どもめ!
/ix
)
{
print "OK!";
}
文字列の先頭・末尾にマッチさせたい
$_ = "abc";

# 先頭にマッチさせたいなら\Aアンカーを使う
if (/\Aa/) {
    print "OK!";
}

# 末尾にマッチさせたいなら\zアンカーを使う
if (/c\z/) {
    print "OK!";
}
単語単位でマッチさせたい
# \bアンカーを使えば単語単位でマッチ出来る
$_ = "abc ab a";
if (/\ba\b/) {
    print "OK!";
}

# この場合最後のaにだけマッチする
$_を使いたくない!
# 左側の文字列に右側のパターンをマッチさせる
my $hoge = "abc";
if ($hoge =~ /abc/) {
    print "OK!";
}

# おそらく頻度の高い使い方
パターンの中で変数展開したい
# ダブルクォート文字列を同じように変数展開される
$_ = "abc";
my $hoge = "b";
if (/a($hoge)c/) {
    print "OK!";
}
次回は

次回は第八章の続きを予定。