名 前
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()
で の 検 索 処 理
に 適 合 す る 形
態 に す る 。
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() の 実 行
に よ っ て 、 そ
れ ら に 部 分 文
字 列 マ ッ チ ン
グ 位 置 情 報 が
代 入 さ れ る 。
i 番 目 の 括 弧
で 始 ま る 部 分
正 規 表 現 の オ
フ セ ッ ト は
pmatch[i] に 格 納 さ
れ る 。 正 規 表
現 全 体 の マ ッ
チ ア ド レ ス は
pmatch[0] に 格 納 さ
れ る 。 (N 個 の
部 分 正 規 表 現
の マ ッ チ の オ
フ セ ッ ト を 返
す た め に は 、
nmatch は 最 低 限 N+1
で な け れ ば な
ら な い 点 に 注
意 す る こ と 。 )
未 使 用 の 構 造
体 要 素 に は −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 文 字 分 に エ ラ ー メ ッ セ ー ジ と 終 端 の ヌ ル バ イ ト ('\0') が 収 ま る よ う に 代 入 さ れ る 。
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) と
し て 有 効 で は
な い 。 (訳 注 ) 詳
細 は 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)
glibc マ ニ ュ ア ル の
セ ク シ ョ ン Regular
Expression Matching
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。