標準
標準/拡張機能 |
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 を実行します。cmppat が subject ストリングの全部または一部と一致した場合
には、regex() 関数は、subject ストリング中で一致しない次の文字への
ポインターを戻し、subject ストリングの最初に一致した文字を指すように
外部変数 __loc1 を設定します。cmppat と subject のストリングの間に一致が見つからない場合
には、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 の範囲内の
数字と一致します。
注 : - 同じ RE に適用される複数の重複記号は、次の優先順位で解釈されます。
- *
- +
- {}
- RE の優先順位は、高位から低位の順に以下のようになります。
- エスケープ文字 ¥ 文字
- 大括弧式 [...]
- 副次式 (...)
- 重複 * + {}
- 連結 yz
- アンカー ^ $
注:
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 ポインターを戻します。