7. 正規表現の世界

初めてのPerl 第6版メモ。

7.1 正規表現とは

  • regular expression:Perlではパターンと呼ぶことがある。文字列に対してマッチさせると成功または失敗のいずれかになる。

7.2 単純なパターンを使う

  • パターンを//で囲って指定すると、$_に対するマッチとなる。
  • パターン中では全ての逆スラッシュエスケープを利用できる。
7.2.1 Unicode属性
  • Unicode文字には属性という情報がある。
  • 正規表現では特定の文字だけでなく文字の種類にもマッチさせられる。属性名を\p{}で指定する。特定のUnicode属性をもたない文字にマッチさせることもできる。\P{}はその属性の否定となる。
    • 空白文字:Space
    • 数字:Digit
    • 16進数:AHex
7.2.2 メタキャラクタについて
  • メタキャラクタは\でエスケープできる。
  • .:改行文字を除くあらゆる1文字にマッチする。
7.2.3 単純な量指定子
  • *:直前のものに0回以上マッチする。
  • +:直前のものに1回以上マッチする。
  • ?:直前のものが0回か1回マッチする。
7.2.4 パターンをグループにまとめる
  • ()を使ってパターンをグループにまとめられる。
    • (hoge)+はhogeやhogehogeにマッチする。
  • 後方参照によってマッチしたものを再利用出来る。これをキャプチャグループと呼ぶ。
  • 後方参照では\の後ろに数字でカッコのグループを指定する。
    • (.)\1:aaやbbにマッチ。
  • 数字は開きカッコを頭から数えた時の順番に対応する。
  • Perl5.10以降では\と数値の代わりに\g{}が使える。
7.2.5 選択肢
  • |:|を挟んで左側か右側のいずれか一方の文字列にマッチする。
    • a or b|a and b:a or bかa and bにマッチ。

7.3 文字クラス

  • character class:[]の間に文字を並べたもの。いずれか1文字にマッチする。マッチは1文字だけ。
  • ハイフンを使って範囲を指定できる。
    • [a-zA-Z]:アルファベット
    • [\000-\177]:7ビットASCII文字全て。
    • [0-9]:数字
  • 文字クラスの内側ではハイフンはエスケープが必要。
  • ^は否定を表す。
    • [^a]:a以外の1文字。
7.3.1 文字クラスのショートカット
  • \d:すべての数字を表す。ASCIIの0から9まで以外の全ての言語での数字に対応する。
  • \s:全ての空白文字。\p{Space}と概ね同じ。
  • \h:水平方向空白文字(Perl5.10)
  • \v:垂直方向の空白文字(Perl5.10)
  • \R:行末(linebreak、Perl5.10)
  • \w:ワードにマッチ。
  • マッチ演算子の後ろに/a修飾子をつけるとASCIIコードのみの指定となる。
    • /[\d]+/a
7.3.2 ショートカットの否定
  • ショートカットのアルファベットを大文字にすると否定となる。
  • [\d\D]:改行文字も含めた全ての文字にマッチする。