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

標準

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

形式

#define _XOPEN_SOURCE_EXTENDED  1
#include <libgen.h>

char *regcmp(const char *pattern[,...], (char *)0);

char *regex(const char *cmppat, const char *subject[,subexp,...]);

extern char *__loc1;

機能説明

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

regcmp() 関数は、1 つ以上の pattern 引数のリストで指定された、正規表現 (RE) パターンを連結します。このリストの終わりは、NULL ポインターで区切る必要があります。次に、関数は、連結した RE パターンをパターン照合 regex() 関数で適切に使用できるように、内部形式に変換します。変換が正常に実行されると、regcmp() は、変換済みパターンへのポインターを戻します。正常に変換されなかった場合には、NULL ポインターを戻します。regcmp() 関数は、malloc() を使用して、変換済みパターン用のストレージを取得します。このように割り振られた後、不要になったスペースを解放するのは、アプリケーション側で実行しなければならない処理です。

regex() 関数は、subject ストリングに対して、変換済みパターン cmppat を実行します。cmppatsubject ストリングの全部または一部と一致した場合 には、regex() 関数は、subject ストリング中で一致しない次の文字への ポインターを戻し、subject ストリングの最初に一致した文字を指すように 外部変数 __loc1 を設定します。cmppatsubject のストリングの間に一致が見つからない場合 には、regex() 関数は NULL ポインターを戻します。

regcmp() および regex() 関数は、すべてのロケールでサポートされます。しかし、これらの関数を同じロケールで実行しないと、結果は予測できません。

regcmp() と regex() 関数に対する有効な RE 記号およびその意味は、以下のとおりです。
意味
NUL
RE パターンおよびテキスト・ストリングを終了します。
c
非特殊文字 c は、1 文字 RE であり、それ自体と一致します。
¥s
特殊文字 s が続いた円記号 (¥) は、1 文字 RE であり、特殊文字自体と一致します。
特殊文字は以下のとおりです。
  • ピリオド (.)、アスタリスク (*)、正符号 (+)、ドル $、左大括弧 ([)、左中括弧 ({)、右中括弧 (})、左括弧 (()、右括弧 ())、および円記号 (¥)。これらは、大括弧 ([]) 内に現れるとき以外は、常に特殊です。
  • 脱字記号 (^) は、RE 全体の先頭では特殊です (これはパターンの 場合は別の名前です)。
注: 前に ¥ がある非特殊文字は、1 文字 RE であり、非特殊文字自体と 一致します。
yz
RE y と z の連結は、y および z によって一致したストリングの連結と 一致します。
.
ピリオド (.) 特殊文字 RE は、<newline> 文字以外のどの単一文字とも一致します。
^
RE 全体の先頭の脱字記号 (^) は、ストリングの先頭と一致する RE です。したがって、これは RE 全体での一致をストリングの先頭に固定または 限定します。
$
RE 全体の末尾のドル ($) は、単にストリング (<NUL> 文字で範囲を定められています) の終わりの RE です。したがって、これは RE 全体での一致をストリングの終わりに固 定または限定します。
注: ¥n (<newline> 文字の C 言語指定) は、RE 全体で使用して、テキスト・ストリング中の組み込みまたは末尾 <newline> 文字と一致する必要があります。
(...)
括弧は、副次式を区切るために使用します。この副次式は、副次式を 構成している RE が、括弧で区切らなくても一致するものとなら何とでも 一致します。
(...)$n
$n。この場合、n は 0 ~ 9 までの範囲の数字であり、副次式にタグを付けるのに使用される場合があります。このタグは、subject の後の (n+1) 番目の引数によって指定された アドレスの副次式によって、一致したサブストリングを戻すように regex() 関数に 指示します。
*
アスタリスク (*) が続く 1 文字 RE または副次式は、1 文字 RE または副次式のゼロ個以上のオカレンスと一致する RE です。選択項目がある場合には、一致を許可する左端の最長のストリングが選択されます。
+
正符号 (+) が続く 1 文字 RE または副次式は、1 文字 RE または副次式の 1 つ以上のオカレンスと一致する RE です。選択項目が存在している時は常に、RE は可能な限り多くのオカレンスと一致します。
{m,n}
中括弧で囲まれている整数値 m および n が続いた 1 文字 RE または副次式は、前の 1 文字 RE または副次式が一致したものすべての繰り返す オカレンスと一致する RE です。m の値 (0 ~ 255 までの範囲内にする必要がある) は、一致のために必要な 最小のオカレンス数です。値 n (指定する場合には、0 ~ 255 までの範囲内にする必要がある) は、最大数です。値 n (指定する場合) は、値 m より大きいか等しくなっている必要があります。次の中括弧の式は有効です。
{m}
前の 1 文字 RE または副次式の m 個のオカレンスと正確に一致します。
{m,}
前の 1 文字 RE または副次式の m 個以上のオカレンスと一致します。一致するオカレンス数に制限はありません。正符号 (+) およびアスタリスク (*) 操作は、それぞれ、{1,} および {0,} と同等です。
{m,n}
m ~ n 個までの範囲のオカレンスと一致します。

選択項目が存在する時は常に、RE は可能な限り多くのオカレンスと一致します。

[...]
大括弧に囲まれた文字の非空リストは、そのリストのどの 1 文字とも 一致する 1 文字 RE です。
[^...]
大括弧で囲まれ、脱字記号 (^) が前にある文字の空でないリストは、<newline> およびリスト中の文字を除いた、どの文字とも一致する 1 文字 RE です。^ が特別な意味を持つのは、これが左大括弧 ([) の後の最初の 文字である場合だけです。
[c1-c2]
大括弧内の 2 つの文字、c1 と c2 の間のハイフン (-) は、照合値が 現行ロケールにおける照合値 c1 ~ c2 までの間に収まるような文字の リストを指定します。照合値 c2 は、c1 より大きいか等しくなっている必要があります。また、c2 は、ある範囲の終了点としても、別の範囲の開始点としても使用する ことはできません。すなわち、c1-c2-c3 は無効です。

大括弧の式の最初または最後に現れた場合、あるいは c1 または c2 に 使用した場合には、ハイフン (-) は特別な意味を失います。

右大括弧、] は、大括弧式内の先頭文字 (あれば最初の ^ の後) のときには、この式を終了しません。例えば、式 []0-9] は、右大括弧または 0 から 9 の範囲内の 数字と一致します。
注 :
  1. 同じ RE に適用される複数の重複記号は、次の優先順位で解釈されます。
    1. *
    2. +
    3. {}
  2. RE の優先順位は、高位から低位の順に以下のようになります。
    1. エスケープ文字 ¥ 文字
    2. 大括弧式 [...]
    3. 副次式 (...)
    4. 重複 * + {}
    5. 連結 yz
    6. アンカー ^ $
注:

regcmp() および regex() 関数は、従来からの運用上の理由から提供されます。 これらの関数は Single UNIX Specification、バージョン 2 のレガシー機能の 一部でした。既に廃止され、Single UNIX Specification、バージョン 3 の一部として サポートされていません。新しいアプリケーションでは、より新しい関数の fnmatch()、glob()、regcomp()、および regexec() を使用してください。 これらの関数は、IEEE 標準 1003.1-2001 と 互換性を持つ完全な国際化正規表現の機能を提供します。

Single UNIX Specification、バージョン 3 のために 書かれたアプリケーションで、これらの関数を引き続き使う必要がある場合は、 標準システム・ヘッダーを組み込む前に、フィーチャー・テスト・マクロ _UNIX03_WITHDRAWN を 定義してください。マクロは、Single UNIX Specification、バージョン 3 に移動された すべてのインターフェースおよびシンボルを公開します。

戻り値

pattern 引数のリストを連結することによって形成されたパターンが、正常に変換されると、regcmp() は、変換済みのパターンへのポインターを戻します。正常に変換されなかった場合には、NULL ポインターを戻します。regcmp() が、変換済みパターンにストレージを割り振ることができない場合には、errno が ENOMEM に設定されます。

regex() は、subject ストリングの全部または一部への変換済みパターン cmppat が正常に一致した場合には、この関数は、subject の中の一致しない次の文字へのポインターを戻します。正常に変換されなかった場合には、NULL ポインターを戻します。

関連情報