Perl5 perlre - Perl の正規表現
[DESCRIPTION][正規表現][Version 8 正規表現][FAQやTIPS]
-
Version 8 正規表現
- 万が一、みなさんが「正規の」Version 8 正規表現ルーティンを知
らなかった場合のために、これまでに書いていないパターンマッチ
の規則を示します。
-
- ある 1 文字は、その文字がこの節かこれまでに示した「メタ文字」
でない場合には、その文字自身にマッチします。
通常はメタ文字
として働く文字も、前に "\" を付けることで、文字通りに解釈さ
れるようにすることができます。
(たとえば、"\." は任意の 1
文字ではなく、"." という文字にマッチします。)
文字の並びは、
対象の文字列の中の同じ文字の並びにマッチしますから、blurfl
というパターンは、対象となる文字列の "blurfl" にマッチします。
-
- 文字のリストを [] で囲って、そのリストのいずれかの文字にマッ
チする、文字クラスを指定することができます。
"[" に続く最初
の文字が "^" であれば、その文字クラスは、リストに無い文字に
マッチするようになります。
リストの中では、"-" が範囲を示す
のに使われ、a-z は "a" から "z" までのすべての文字を表わしま
す。
-
- C で使われているのと非常によく似たメタ文字構文を使って、文字
を指定することができます。
"\n" が改行、"\t" がタブ、"\r"
が復帰、"\f" が改ページといった具合です。
さらに一般的には、
nnn を 8 進数の数字として、\nnn は ASCII 値が nnn の文字にマ
ッチします。
同様に、nn を 16 進数の数字として、\xnn は
ASCII 値が nn の文字にマッチします。
\cx という式は、ASCII
文字 control-x にマッチします。
最後に、メタ文字 "." は (/s
を使っているときを除いて) "\n" を除くどんな文字にもマッチし
ます。
-
- "|" で区切ることで、パターンの選択肢を示すことができますから、
fee|fie|foe は、対象の文字列の "fee" か "fie" か "foe" のい
ずれかにマッチします (f(e|i|o)e と同じ)。
最初の選択肢には、
最後の区切文字 ("(" か "[" かパターンの始め) の後から最初の
-
- "|" の前までが含まれ、最後の選択肢には、最後の "|" の後から
次のパターンの区切文字の前までが含まれます。
この事から、最
初と最後をはっきりさせるために、選択肢を括弧に入れることがよ
く行なわれます。
(fee|fie|foe) というパターンは、
[fee|fie|foe] というパターンとは違うことに注意してください。
前者が対象文字列の "fee" か "fie" か "foe" にマッチするのに
対して、後者は [fee] か [fie] か [foe] のいずれかの文字クラ
スにマッチするものにマッチします (つまり、文字クラス [feio]
です)。
-
- パターンではあとで参照するために、括弧で括ってサブパターンを
指定でき、そのパターンの中で n 番目のサブパターンを \n とい
うメタ文字で参照することができます。
サブパターンは、左から
右に向かって、開き括弧に対して番号がつけられます。
後方参照
は、サブパターンが調べられる文字列中で、実際にマッチしたもの
にマッチするのであって、そのサブパターン規則そのものにマッチ
するのではありません。
ですから、([0|0x])\d*\s\1\d* という
パターンは、"0x1234 0x4321" にマッチしますが、"0x1234 01234"
にはマッチしません。
たとえ [0|0x] という規則が 2 番目の数
字の前の 0 にマッチすることができるとしても、サブパターン 1
は、"0x" にマッチしたものだからです。
出典:Perl manpages Last change: Release 5.0 Patchlevel 00 5