Manpages

名 前

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

regexPOSIX 拡 張 正 規 表 現 を 使 用 す る 。 も し こ の フ ラ グ が 設 定 さ れ な い 場 合 、 POSIX 標 準 正 規 表 現 が 使 わ れ る 。

REG_ICASE 大 文 字 小 文 字 の 違 い を 無 視 す る 。 こ の フ ラ グ を 指 定 し て コ ン パ イ ル さ れ た パ タ ー ン バ ッ フ ァ ー を 用 い て regexec() 関 数 を 呼 び 出 す と 、 大 文 字 小 文 字 の 区 別 を 付 け ず に 検 索 が 行 わ れ る 。
REG_NOSUB
マ ッ チ の 場 所 を 報 告 し な い 。 渡 さ れ た パ タ ー ン バ ッ フ ァ ー が こ の フ ラ グ を 設 定 し て コ ン パ イ ル さ れ て い た 場 合 、 regexec() の 引 き 数 nmatch, pmatch が 無 視 さ れ る 。
REG_NEWLINE
全 て の 文 字 に マ ッ チ す る オ ペ レ ー タ に 改 行 を マ ッ チ さ せ な い 。 改 行 を 含 ま な い 非 マ ッ チ ン グ 文 字 リ ス ト ([^...]) に 改 行 を マ ッ チ さ せ な い 。

regexec() の 実 行 時 に 指 定 す る フ ラ グ eflagsREG_NOTBOL を 含 む か ど う か に か か わ ら ず 、 行 頭 に マ ッ チ す る オ ペ レ ー タ (^) を 改 行 直 後 の 空 文 字 列 に マ ッ チ さ せ る 。

eflagsREG_NOTEOL を 含 む か ど う か に か か わ ら ず 、 行 末 に マ ッ チ す る オ ペ レ ー タ ($) を 改 行 直 前 の 空 文 字 列 に マ ッ チ さ せ る 。

POSIX regex マ ッ チ ン グ
regexec
() は 、 プ リ コ ン パ イ ル さ れ た パ タ ー ン バ ッ フ ァ ー preg を ヌ ル 文 字 で 終 端 さ れ た 文 字 列 に マ ッ チ さ せ る 。 nmatchpmatch は マ ッ チ ン グ の 位 置 に 関 す る 情 報 を 取 得 す る の に 用 い ら れ る 。 eflags に は REG_NOTBOLREG_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 の サ イ ズ を 返 す 。 も し errbuferrbuf_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/ に 書 か れ て い る 。