re_comp() - 正規表現のコンパイル

標準

標準/拡張機能 C/C++ 依存項目
XPG4.2 両方  

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <re_comp.h>

char *re_comp(const char *string);

機能説明

制約事項: この関数は、AMODE 64 ではサポートされません。

re_comp() 関数は、正規表現のストリングが re_exec() によるパターン照合用に 適切な内部形式に変換します。

パラメーター string は、コンパイルするソースの正規表現を定義する 文字ストリングへのポインターです。

re_comp() が NULL 引数を指定して呼び出された場合には、現行の正規表現は 未変更のままになります。

re_comp() へ渡されるストリングは、NULL バイトで終わっ ていなければなりません。また、改行文字を含んでいてもかまいません。
注 :
  1. re_comp() および re_exec() 関数は、スレッド・レベルでサポ ートされます。これらの関数は、正しく動作するように同じ スレッドから発行する必要があります。
  2. re_comp() および re_exec() 関数は、従来からの運用上の理由から提供されます。 これらの関数は Single UNIX Specification、バージョン 2 のレガシー機能の 一部でした。既に廃止され、Single UNIX Specification、バージョン 3 の一部として サポートされていません。新しいアプリケーションでは、より新しい関数の fnmatch()、glob()、regcomp()、および regexec() を使用してください。 これらの関数は、IEEE 標準 1003.1-2001 と 互換性を持つ完全な国際化正規表現の機能を提供します。

  3. re_comp() 関数の z/OS®UNIX インプリメンテーション は、POSIX ロケールのみをサポートします。そのほかのロケールでは、予測できない結果になります。

re_comp() 関数は、以下のように定義された単純正規表現をサポートします。

単純正規表現: 単純正規表現 (SRE) は、一組のストリングを指定します。 正規表現の最も単純な形式は、特別な意味をもたない文字ストリングです。メタキャラクターとして知られている特殊文字の小さなセット は、パターンで検出されたときに特殊な意味を持ちます。

次の 1 文字正規表現 (RE) は、単一文字と一致します。
  1. 普通文字 c (特殊文字ではない) は、それ自体と 一致する 1 文字の正規表現です。
  2. 特殊文字が続く円記号 (¥) (つまり c が特殊文字で ある ¥c) は、特殊文字そのものと一致する 1 文字の正規表現です。特殊文字は以下のとおりです。
    1. .、*、[、および ¥ (それぞれ、ピリオド、アスタリスク、左大括弧、およびバックスラッシュまたは円記号)。これらは大括弧 ([]) 内に現れるときを除いて常に特殊です。
    2. ^ (脱字記号または曲折アクセント記号)。これは正規表現全体の先頭にあるか、あるいは一対の大括弧 ([]) の直前 (左側) にあるときに特殊です。
    3. $ (ドル記号)。これは、正規表現の終わりにあると特殊です。
    4. 正規表現全部を結合する (範囲を定める) ために使用される文字。その正規表現について特殊です。
    注: 普通文字が続く円記号 (¥) は、普通文字そのものと一致 する 1 文字正規表現です。
  3. ピリオド (.) は、改行以外のすべての文字と一致する 1 文字 RE です。
  4. 大括弧内の空以外のストリング ([string]) は、その string のどの 1 文字とも一致する 1 文字 RE です。したがって、その他のストリングと比較した場合に、[abc] は a、b、または c を含むどのようなストリングとも一致することになります。

    脱字記号 (^) が、大括弧内のストリングの先頭文字であると (つまり、[^string])、1 文字 RE は、改行および大括弧内の残りの文字を除いたどの文字とも一致します。したがって、その他のストリングと比較した場合に、[^abc] は a、b、または c の いずれか 1 つでも含むストリングとは一致しないことになります。

    範囲は、c-c として指定できます。大括弧内のハイフン記号は、「範囲」という意味です。これは、連続している ASCII 文字の範囲を示すために使用できます。例えば、[0-9] は [0123456789] と等価です。

    - (ハイフン) はそれ自体で使用できますが、これが式の先頭文字 (あれば 最初の ^ の後) または末尾文字の場合だけです。

    右大括弧 (]) はストリングの一部として使用できますが、ストリング内の 先頭文字 (あれば最初の ^ の後) の場合だけです。例えば、式 []a-d] は、右大括弧 または ad の文字の 1 つと一致します。

次の規則は RE を 1 文字 RE から構成するのに使用できます。
  1. 1 文字 RE は、1 文字 RE が一致するものとなら何とでも一致する RE です。
  2. アスタリスク記号 (* ) が続く 1 文字 RE は、1 文字 RE の 0 個またはそれ以上のオカレンスと一致する RE です。例えば、(a*e) は次のいずれかと一致することになります。すなわち、e、ae、aaaaae です。左端が最も長く一致するものが選択されます。
  3. ¥{m}¥、¥{m,¥}、または ¥{m,u¥} が後に 続く 1 文字 RE は、1 文字 RE のオカレンスの範囲が一致する RE です。¥{¥} に囲まれている負でない整数値は、前の 1 文字 RE を適用する回数を示しています。m は最小数で、u は最大数です。u は 256 未満でなければなりません。 m だけを指定すると、正規表現を適用する正確な回数を示します。

    ¥{m,¥} は ¥{m,u¥} と等価です。 これらは両方とも、式の m 個以上のオカレンスと一致します。* (アスタリスク) 演算子は、¥{0,¥} と同等です。

    オカレンスの最大数は一致します。

  4. RE は連結することができます。RE の連結は、RE の各コンポーネントと一致するストリングの連結と一致する RE です。
  5. 文字シーケンス ¥(¥) の間に入った RE は、装飾されない RE が一致するものであれば何とでも一致する RE です。¥(および ¥) シーケンスは無視されます。
  6. 式 ¥n (ここでは、1 <= n <= 9) は、同じ正規表現の 始めの方で ¥(および ¥) に囲まれた式と一致するのと同じ文字ストリングと 一致します。これで指定される副次式は、¥ の n 番目 (左から数えて) の オカレンスで始まる式です。例えば、式 ¥(a¥)r¥(e¥)¥1 で、¥1 は a と同等で、area を指定します。
RE 全体が、行の最初のセグメントまたは最終セグメント (またはその両方) と一致させるだけのために制約される場合があります。
  1. RE 全体の先頭の脱字記号 (^) によって、RE が行の 最初のセグメントと一致するように制約されます。
  2. RE 全体の末尾のドル記号 ($) によって、RE が行の最終セグメントと 一致するように制約されます。例えば、構成 ^entire RE$ により、RE が行全体と 一致するように制約されます。

戻り値

string 引数によって指されたストリングが正常に変換されると、re_comp() は NULL ポインターを戻します。

正常に実行されなかった場合、re_comp() は、エラー・メッセージ・ストリング (NULL で終了) へのポインターを戻します。

以下の re_comp() エラー・メッセージが定義されています。
  EDC7008E No previous regular expression
  EDC7009E Regular expression too long
  EDC7010E ¥(¥) imbalance
  EDC7011E ¥{¥} imbalance
  EDC7012E [] imbalance
  EDC7013E Too many ¥(¥) pairs.
  EDC7014E Incorrect range values in ¥{¥}
  EDC7015E Back reference number in ¥digit incorrect
  EDC7016E Incorrect endpoint in range expression
注: エラー・メッセージ・ストリングは、アプリケーションによって解放されることは ありません。スレッドの終了時に解放されることになります。

関連情報