REGEX
Section: Linux Programmer's Manual (3)
Updated: 1998-05-08
Index
JM Home Page
roff page
名前
regcomp, regexec, regerror, regfree - POSIX regex 関数
書式
#include <sys/types.h>
#include <regex.h>
u
int regcomp(regex_t *preg, const char *regex,
int cflags);
u
int regexec(const regex_t *preg, const char *string,
size_t nmatch, regmatch_t pmatch[],
int eflags);
u
size_t regerror(int errcode,
const regex_t *preg, char *errbuf,
size_t errbuf_size);
void regfree(regex_t *preg);
説明
POSIX regex コンパイル
regcomp()
は、正規表現をコンパイルして、
regexec()
での検索処理に適合する形態にする。
regcomp()
はパターンを記憶するバッファへのポインタ
preg、
ヌル文字で終端された文字列
regex、
そしてコンパイルの形式を決めるためのフラグ
cflag
を引数に伴う。
全ての正規表現検索は、コンパイルされたパターンによって行わなければならない。
よって、
regexec()
に指定するのは、必ず
(regcomp()
によってコンパイルされた) パターンバッファへのアドレスでなければならない。
cflags
には以下に示す定数一つ以上のビットごとの OR (bitwise-or) を指定する。
- REG_EXTENDED
-
regex
に
POSIX
拡張正規表現を使用する。もしこのフラグが設定されない場合、
POSIX
標準正規表現が使われる。
- REG_ICASE
-
大文字小文字の違いを無視する。このフラグを指定してコンパイルされた
パターンバッファを用いて
regexec()
関数を呼び出すと、大文字小文字の区別を付けずに検索が行われる。
- REG_NOSUB
-
このフラグを設定してコンパイルされたパターンバッファが
regexec()
の引数に指定されると、パラメータ
nmatch,
pmatch
が無視される。
- REG_NEWLINE
-
全ての文字にマッチするオペレータに改行をマッチさせない。
改行を含まない非マッチング文字リスト
([^...])
に改行をマッチさせない。
regexec()
の実行時に指定するフラグ
eflags
に
REG_NOTBOL
を含むかどうかにかかわらず、行頭にマッチするオペレータ
(^)
を改行直後の空文字列にマッチさせる。
eflags
に
REG_NOTEOL
を含むかどうかにかかわらず、行末にマッチするオペレータ
($)
を改行直前の空文字列にマッチさせる。
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 が値として代入される。
pmatch
の型である
regmatch_t
構造体は、
regex.h
内で定義される。
-
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;
構造体要素
rm_so
の値が -1 でない場合、それは文字列内での次の最大のマッチング部分の開始
オフセット位置を示す。それに対し、構造体要素
rm_eo
はマッチング部分の終了オフセット位置を示す。
POSIX エラーレポート
regerror()
は、
regcomp()
と
regexec()
の実行によって得られるエラーコードから、エラーメッセージ文字列を
得るのに用いられる。
regerror()
はエラーコード
errcode、
パターンバッファ
preg、
文字列バッファへのポインタ
errbuf、
文字列バッファのサイズ
errbuf_size
を引数にとる。
この関数は、ヌル文字で終端されたエラーメッセージ文字列を格納するのに必要な
errbuf
のサイズを返す。もし
errbuf
と
errbuf_size
の両方が非 0 値であれば、
errbuf
には最初の
errbuf_size - 1
文字分にエラーメッセージと終端のヌル文字が収まるように代入される。
POSIX パターンバッファ解放
引数にコンパイルされたパターンバッファ
preg
を与えて
regfree()
を呼び出すと、
regcomp()
によるコンパイル時にパターンバッファに割り当てられたメモリが解放される。
返り値
regcomp()
は、コンパイルの成功時には 0 を返し、失敗時にはエラーコードを返す。
regexec()
は、マッチングの成功時には 0 を返し、失敗時には
REG_NOMATCH
を返す。
エラー
regcomp()
は以下のエラーを返す。
- REG_BADBR
-
無効な後方参照オペレータの使用。
- REG_BADPAT
-
グループやリストなどの、パターンオペレータの無効な使用。
- REG_BADRPT
-
`*'
が最初の文字としてくるような、無効な繰り返しオペレータの使用。
- REG_EBRACE
-
インターバルオペレータ
{}
(brace interval operators) が閉じていない。
- REG_EBRACK
-
リストオペレータ
[]
(bracket list operators) が閉じていない。
- REG_ECOLLATE
-
照合順序の要素 (collating element) として有効ではない。
(訳注) 照合順序の要素 (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 マニュアル
Index
- 名前
-
- 書式
-
- 説明
-
- POSIX regex コンパイル
-
- POSIX regex マッチング
-
- バイトオフセット
-
- POSIX エラーレポート
-
- POSIX パターンバッファ解放
-
- 返り値
-
- エラー
-
- 準拠
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:59 GMT, November 19, 2007