TOP - Perl - 正規表現 - 特殊な字句

正規表現中に特殊な機能の字句を入れることにより、位置を条件としたマッチや回数を条件としたマッチを試みる事が可能です。
以下のリストの字句は、右側に記載の位置・条件・字句にマッチします。
^       : 文字列(/m指定時は「行」)の先頭
$       : 文字列(/m指定時は「行」)の末尾
\b      : 単語境界
\B      : 単語境界以外
\A      : 文字列の先頭
\Z      : 文字列の末尾

{n,m}   : n回以上m回以下の繰り返し
{n,}    : n回以上の繰り返し
{n}     : n回の繰り返し
*       : 0回以上の繰り返し
+       : 1回以上の繰り返し
?       : 0回または1回の繰り返し

\a      : アラーム
\n      : 改行文字
\r      : 復帰文字
\t      : タブ
\f      : 改ページ文字
\e      : エスケープ文字
\d      : 数字
\D      : 数字以外
\w      : 単語構成文字(英数字)
\W      : 単語構成文字以外
\s      : 空白文字
\S      : 空白文字以外
.       : 改行以外の全ての文字

(例1 位置関連)
$_ = "test1 test2 test3 test4 test5";     # パターンマッチ対象文字列

if (/^te\w+/)                             # 文字列先頭にマッチ
{
    print "$&\n";                         # "test1"がマッチ
}

if (/te\w+$/)                             # 文字列末尾にマッチ
{
    print "$&\n";                         # "test5"がマッチ
}

if (/\w+st\d\b/)                          # 単語境界にマッチ
{
    print "$&\n";                         # "test1"がマッチ
}

if (/te\B\w+/)                            # 単語境界以外にマッチ
{
    print "$&\n";                         # "test1"がマッチ
}

if (/\Ate\w+/)                            # 文字列先頭にマッチ
{
    print "$&\n";                         # "test1"がマッチ
}

if (/te\w+\Z/)                            # 文字列末尾にマッチ
{
    print "$&\n";                         # "test5"がマッチ
}
実行結果
test1
test5
test1
test1
test1
test1
test5

(例2 回数関連)
$_ = "test1 test2 test3 test4 test5";     # パターンマッチ対象文字列

if (/(test\d\s){2,3}/)                    # 2回以上3回以内の繰り返しにマッチ
{
    print "$&\n";                         # "test1 test2 test3"にマッチ
}

if (/(test\d\s){2,}/)                     # 2回以上の繰り返しにマッチ
{
    print "$&\n";                         # "test1 test2 test3 test4"にマッチ
}

if (/(test\d\s){2}/)                      # 2回の繰り返しにマッチ
{
    print "$&\n";                         # "test1 test2"にマッチ
}

if (/(test\d\s)*/)                        # 0回以上の繰り返しにマッチ
{
    print "$&\n";                         # "test1 test2 test3 test4"にマッチ
}

if (/(test\d\s)+/)                        # 1回以上の繰り返しにマッチ
{
    print "$&\n";                         # "test1 test2 test3 test4"にマッチ
}

if (/(test\d\s)?/)                        # 0回または1回の繰り返しにマッチ
{
    print "$&\n";                         # "test1"にマッチ
}
実行結果
test1 test2 test3
test1 test2 test3 test4
test1 test2
test1 test2 test3 test4
test1 test2 test3 test4
test1

(例3 メタ文字関連)
$_ = "test1:;{} test2";                   # パターンマッチ対象文字列

if (/\d/)                                 # 数字にマッチ
{
    print "$&\n";                         # "1"にマッチ
}

if (/\D/)                                 # 数字以外にマッチ
{
    print "$&\n";                         # "t"にマッチ
}

if (/\w/)                                 # 単語構成文字にマッチ
{
    print "$&\n";                         # "t"にマッチ
}

if (/\W/)                                 # 単語構成文字以外にマッチ
{
    print "$&\n";                         # ":"にマッチ
}

if (/\s/)                                 # 空白文字にマッチ
{
    print "$&\n";                         # " "にマッチ
}

if (/\S/)                                 # 空白文字以外にマッチ
{
    print "$&\n";                         # "t"にマッチ
}

if (/./)                                  # 改行文字以外にマッチ
{
    print "$&\n";                         # "t"にマッチ
}
実行結果
1
t
t
:

t
t


Copyright(C) 2006-2011 CLAYPOT. All Rights Reserved.