Man page - regexec(3)

Packages contains this manual

Available languages:

en fr ja de

Manual

REGEX

名 前
書 式
説 明
POSIX regex コ ン パ イ ル
POSIX regex マ ッ チ ン グ
バ イ ト オ フ セ ッ ト
POSIX エ ラ ー レ ポ ー ト
POSIX パ タ ー ン バ ッ フ ァ ー 解 放
返 り 値
エ ラ ー
属 性
準 拠

関 連 項 目
こ の 文 書 に つ い て

名 前

regcomp, regexec, regerror, regfree - POSIX regex 関 数

書 式

#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 に は 、 以 下 に 示 す 定 数 の う ち 0 個 以 上 を ビ ッ ト ご と の 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 に は 、 以 下 の フ ラ グ の う ち 0 個 以 上 を ビ ッ ト ご と の OR (bitwise- or ) で 指 定 す る 。
REG_NOTBOL

行 頭 に マ ッ チ す る オ ペ レ ー タ は 、 必 ず マ ッ チ に 失 敗 す る (コ ン パ イ ル 時 の フ ラ グ REG_NEWLINE の 項 目 も 参 照 )。 こ の フ ラ グ は 、 複 数 行 に ま た が る 文 字 列 を regexec () で 検 索 す る 際 に 、 文 字 列 の 先 頭 を 行 の 先 頭 と し て 解 釈 さ せ な い 場 合 に 用 い る 。

REG_NOTEOL

行 末 に マ ッ チ す る オ ペ レ ー タ は 、 必 ず マ ッ チ に 失 敗 す る (コ ン パ イ ル 時 の フ ラ グ REG_NEWLINE の 項 目 も 参 照 )。

REG_STARTEND

Use pmatch[0] on the input string, starting at byte pmatch[0].rm_so and ending before byte pmatch[0].rm_eo . This allows matching embedded NUL bytes and avoids a strlen (3) on large strings. It does not use nmatch on input, and does not change REG_NOTBOL or REG_NEWLINE processing. This flag is a BSD extension, not present in POSIX.

バ イ ト オ フ セ ッ ト

パ タ ー ン バ ッ フ ァ ー の コ ン パ イ ル 時 に 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

正 規 表 現 の コ ン パ イ ル に 、 64 Kb 以 上 の パ タ ー ン バ ッ フ ァ ー が 必 要 。 こ れ は POSIX.2 に は 定 義 さ れ て い な い 。

REG_ESPACE

regex ル ー チ ン が メ モ リ ー を 使 い は た し て い る 。

REG_ESUBREG

サ ブ エ ク ス プ レ ッ シ ョ ン \ (...\ ) (subexpression) へ の 無 効 な 後 方 参 照 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-45252-1.png

準 拠

POSIX.1-2001, POSIX.1-2008.

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>

#define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]))

static const char *const str =
"1) John Driverhacker;\n2) John Doe;\n3) John Foo;\n";
static const char *const re = "John.*o";

int main(void)
{
static const char *s = str;
regex_t regex;
regmatch_t pmatch[1];
regoff_t off, len;

if (regcomp(&regex, re, REG_NEWLINE))
exit(EXIT_FAILURE);

printf("String = \"%s\"\n", str);
printf("Matches:\n");

for (int i = 0; ; i++) {
if (regexec(&regex, s, ARRAY_SIZE(pmatch), pmatch, 0))
break;

off = pmatch[0].rm_so + (s - str);
len = pmatch[0].rm_eo - pmatch[0].rm_so;
printf("#%d:\n", i);
printf("offset = %jd; length = %jd\n", (intmax_t) off,
(intmax_t) len);
printf("substring = \"%.*s\"\n", len, s + pmatch[0].rm_so);

s += pmatch[0].rm_eo;
}

exit(EXIT_SUCCESS);
}

関 連 項 目

grep (1), regex (7)

glibc マ ニ ュ ア ル の セ ク シ ョ ン Regular Expressions

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。