次: , 前: Pattern Matching, 上: Flex Descriptions


3.7 正規表現

Flexの文字、文字列、クラス、定義、および演算子を組み合わせることで、 正規表現として知られているものが作られます。 (基本単位が数と演算子である) 数学表現と同じように、 基本的な要素は単純なもの (文字、演算子、文字列、クラス、および定義) ですが、 要素を組み合わせることでより複雑な表現式を作ることができます。 例えば、 `c'は単一文字の正規表現で、 `c'にマッチします。 `cc'は2つの正規表現をつないだものを含む正規表現で、 `cc'にマッチします。 `c*'は、 単一文字の正規表現`c'と、 それに続く演算子`*'から構成される正規表現で、 0個以上のcにマッチします。 正規表現の真のパワーは、 個々の要素よりもむしろ、 組み合わせ可能な方法の中にあります。

次の表は、 Flexで利用可能な正規表現をすべて示したものです。 表中において、 `c'は (エスケープ・シーケンスを含む) 任意の単一文字を、 `r'は任意の正規表現を、 `s'は文字列を表します。 表はグループ別に編成してあり、 優先度の最も高いものが一番上にあります。


Unixにおいてパターン検索が必要な場合には正規表現がよく使われますが、 アプリケーションが異なると、 正規表現もよく似てはいるもののまったく同一ではないという点に注意してください。 例えば、 Flex、egrepEmacsはいずれもパターン検索のテンプレートとして正規表現を使いますが、 それぞれが理解する正規表現は少しずつ異なります。 特に、 Flexでは定義が使われますが、 egrepEmacsでは使われませんし、 egrepEmacsは単語の先頭と末尾にマッチさせるための`\<'と`\>'とを提供していますが、 Flexは提供していません。 さらに、 Emacsはバッファの先頭に対するマッチングや「ファジー」なマッチング等を行うための、 特別な`\letter'シーケンスをほかにも数多く提供しています。