regcomp() — 正規表現のコンパイル
フォーマット
#include <regex.h>
int regcomp(regex_t *preg, const char *pattern, int cflags);
言語レベル
XPG4
スレッド・セーフ
はい
ロケール依存
この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーおよび LC_COLLATE カテゴリーの影響を受ける可能性があります。この関数は、コンパイル・コマンドに対して LOCALETYPE(*CLD) が指定されている場合には使用できません。詳細については、CCSID およびロケールの理解を参照してください。
説明
regcomp() 関数は、pattern が指すソースの正規表現を実行可能なバージョンにコンパイルし、 それを preg が指すロケーションに保管します。 その後で、regexec() 関数を使用して、正規表現をその他のストリングと比較することができます。
cflags フラグは、次のコンパイル・プロセスの属性を定義します。
| cflag | ストリングの説明 |
|---|---|
| REG_ALT_NL |
注: UTF-8 および UTF-32 の場合、統合ファイル・システムの改行文字とデータベースの改行文字は同じです。
|
| REG_EXTENDED | 拡張正規表現をサポートします。 |
| REG_NEWLINE | 改行文字を特別な行末文字として扱います。 次に、] および $ パターンと一致する行の境界を設定し、明示的に \n を使用するストリング内でのみ一致します。 (このフラグを省略した場合、改行文字はその他の文字と同様に扱われます。) |
| REG_ICASE | 照合で大/小文字を区別しません。 |
| REG_NOSUB | pattern に指定された副次式の数を無視します。 ストリングをコンパイル済みパターンと比較する場合 (regexec() を使用) は、 ストリングがパターン全体に一致しなければなりません。 次に、regexec() 関数は、一致が見つかったかどうかのみを示す値を戻します。 この値は、ストリング内のどのポイントから一致が開始するか、 あるいは一致するストリングが何であるかは示しません。 |
正規表現は、コンテキストから独立した構文で、幅広い文字セットと文字セットの配列を表します。 これは、現在のロケールによって、さまざまに解釈されます。 関数 regcomp()、regerror()、regexec()、および regfree() は、 UNIX awk、ed、grep、 および egrep の各コマンドと同様な方法で正規表現を使用します。
戻り値
regcomp() 関数は、正常終了した場合は 0 を戻します。 それ以外の場合はエラー・コードを戻します (このエラー・コードは regerror() 関数への呼び出しで使用できます)。 また、preg の内容は予期できません。
例
#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
regex_t preg;
char *string = "a very simple simple simple string";
char *pattern = "¥¥(sim[a-z]le¥¥) ¥¥1";
int rc;
size_t nmatch = 2;
regmatch_t pmatch[2];
if (0 != (rc = regcomp(&preg, pattern, 0))) {
printf("regcomp() failed, returning nonzero (%d)¥n", rc);
exit(EXIT_FAILURE);
}
if (0 != (rc = regexec(&preg, string, nmatch, pmatch, 0))) {
printf("Failed to match '%s' with '%s',returning %d.¥n",
string, pattern, rc);
}
else {
printf("With the whole expression, "
"a matched substring ¥"%.*s¥" is found at position %d to %d.¥n",
pmatch[0].rm_eo - pmatch[0].rm_so, &string[pmatch[0].rm_so],
pmatch[0].rm_so, pmatch[0].rm_eo - 1);
printf("With the sub-expression, "
"a matched substring ¥"%.*s¥" is found at position %d to %d.¥n",
pmatch[1].rm_eo - pmatch[1].rm_so, &string[pmatch[1].rm_so],
pmatch[1].rm_so, pmatch[1].rm_eo - 1);
}
regfree(&preg);
return 0;
/****************************************************************************
The output should be similar to :
With the whole expression, a matched substring "simple simple" is found
at position 7 to 19.
With the sub-expression, a matched substring "simple" is found
at position 7 to 12.
****************************************************************************/
}