Loose-Info.com
Last Update 2008/05/18
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"; # 2回以上3回以内の繰り返しにマッチ if (/(test\d\s){2,3}/) { print "$&\n"; # "test1 test2 test3"にマッチ } # 2回以上の繰り返しにマッチ if (/(test\d\s){2,}/) { print "$&\n"; # "test1 test2 test3 test4"にマッチ } # 2回の繰り返しにマッチ if (/(test\d\s){2}/) { print "$&\n"; # "test1 test2"にマッチ } # 0回以上の繰り返しにマッチ if (/(test\d\s)*/) { print "$&\n"; # "test1 test2 test3 test4"にマッチ } # 1回以上の繰り返しにマッチ if (/(test\d\s)+/) { print "$&\n"; # "test1 test2 test3 test4"にマッチ } # 0回または1回の繰り返しにマッチ if (/(test\d\s)?/) { 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