regex - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
regcomp, regexec, regerror, regfree - POSIX regex 関数
書式
#include <sys/types.h>
#include <regex.h>
intregcomp(regex_t *
preg
, const char *
regex
,
int
cflags
);
intregexec(const regex_t *
preg
, const char *
string
,
size_t
nmatch
, regmatch_t
pmatch[]
,
int
eflags
);
size_tregerror(int
errcode
,
const regex_t *
preg
, char *
errbuf
,
size_t
errbuf_size
);
voidregfree(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.
関連項目
regex
(7), GNU regex マニュアル