other versions
other languages
other sections
REGEX(3) | Linux Programmer's Manual | REGEX(3) |
名前¶
regcomp, regexec, regerror, regfree - POSIX regex 関数書式¶
#include <sys/types.h> #include <regex.h> int regcomp(regex_t *preg, const char *regex, int cflags); int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size); void regfree(regex_t *preg);
説明¶
POSIX regex コンパイル¶
regcomp() は、正規表現をコンパイルして、 regexec() での検索処理に適合する形態にする。- REG_EXTENDED
- regex に POSIX 拡張正規表現を使用する。もしこのフラグが設定されない場合、 POSIX 標準正規表現が使われる。
- REG_ICASE
- 大文字小文字の違いを無視する。このフラグを指定してコンパイルされた パターンバッファを用いて regexec() 関数を呼び出すと、大文字小文字の区別を付けずに検索が行われる。
- REG_NOSUB
- このフラグを設定してコンパイルされたパターンバッファが regexec() の引数に指定されると、引き数 nmatch, pmatch が無視される。
- REG_NEWLINE
- 全ての文字にマッチするオペレータに改行をマッチさせない。
POSIX regex マッチング¶
regexec() は、 プリコンパイルされたパターンバッファ preg をヌル文字で終端された文字列にマッチさせる。 nmatch と pmatch はマッチングの位置に関する情報を取得するのに用いられる。 eflags には REG_NOTBOL と REG_NOTEOL のどちらか、もしくは両方のビットごとの OR (bitwise-or) を指定し、以下で説明するようにマッチング動作を変化させる。- REG_NOTBOL
- 行頭にマッチするオペレータは、必ずマッチに失敗する (コンパイル時のフラグ REG_NEWLINE の項目も参照)。 このフラグは、複数行にまたがる文字列を regexec() で検索する際に、文字列の先頭を行の先頭として解釈させない場合に用いる。
- REG_NOTEOL
- 行末にマッチするオペレータは、必ずマッチに失敗する (コンパイル時のフラグ REG_NEWLINE の項目も参照)。
バイトオフセット¶
パターンバッファのコンパイル時に REG_NOSUB が設定されない場合は、部分文字列のマッチング位置情報を得ることができる。 pmatch は、少なくとも nmatch の大きさを持つように指定しなければならない。 regexec() の実行によって、それらに部分文字列マッチング位置情報が代入される。 未使用の構造体要素には -1 が値として代入される。typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t;
POSIX エラーレポート¶
regerror() は、 regcomp() と regexec() の実行によって得られるエラーコードから、エラーメッセージ文字列を 得るのに用いられる。POSIX パターンバッファ解放¶
引数にコンパイルされたパターンバッファ preg を与えて regfree() を呼び出すと、 regcomp() によるコンパイル時にパターンバッファに割り当てられたメモリが解放される。返り値¶
regcomp() は、コンパイルの成功時には 0 を返し、失敗時にはエラーコードを返す。エラー¶
regcomp() は以下のエラーを返す。- REG_BADBR
- 無効な後方参照オペレータの使用。
- REG_BADPAT
- グループやリストなどの、パターンオペレータの無効な使用。
- REG_BADRPT
- '*' が最初の文字としてくるような、無効な繰り返しオペレータの使用。
- REG_EBRACE
- インターバルオペレータ {} (brace interval operators) が閉じていない。
- REG_EBRACK
- リストオペレータ [] (bracket list operators) が閉じていない。
- REG_ECOLLATE
- 照合順序の要素 (collating element) として有効ではない。 (訳注) 詳細は regex(7) を参照。
- REG_ECTYPE
- 未知のキャラクタクラス名。
- REG_EEND
- 未定義エラー。これは POSIX.2 には定義されていない。
- REG_EESCAPE
- 正規表現がバックスラッシュで終っている。
- REG_EPAREN
- グループオペレータ () (parenthesis group operators) が閉じていない。
- REG_ERANGE
- 無効な範囲オペレータの使用。 例えば、範囲の終了位置が開始位置よりも前にあるような場合。
- REG_ESIZE
- 正規表現のコンパイルに、64Kb 以上のパターンバッファが必要。 これは POSIX.2 には定義されていない。
- REG_ESPACE
- regex ルーチンがメモリを使いはたしている。
- REG_ESUBREG
- サブエクスプレッション \ (...\) (subexpression) への無効な後方参照。
準拠¶
POSIX.1-2001.関連項目¶
grep(1), regex(7), GNU regex マニュアルこの文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2011-09-27 | GNU |