regerror() — 正規表現のリターン・エラー・メッセージ
形式
#include <regex.h>
size_t regerror(int errcode, const regex_t *preg,
char *errbuf, size_t errbuf_size);言語レベル
XPG4
スレッド・セーフ
はい
ロケール依存
この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーおよび LC_COLLATE カテゴリーの影響を受ける可能性があります。 この関数は、コンパイル・コマンドに対して LOCALETYPE(*CLD) が指定されている場合には使用できません。 詳しくは、 CCSID とロケールについてを参照してください。
説明
regerror() 関数は、正規表現 pregのエラー・コード errcode の説明を検出します。 errcode の説明は、errbuf に割り当てられます。 errbuf_size 値は、
保管できる最大メッセージ・サイズ (errbuf のサイズ) を指定します。 errcode の説明ストリングは、以下のとおりです。
| エラー・コード | ストリングの説明 |
|---|---|
| REG_NOMATCH | regexec() は一致を見つけられませんでした。 |
| REG_BADPAT | 無効な正規表現です。 |
| REG_ECOLLATE | 無効な照合要素が参照されました。 |
| REG_ECTYPE | 無効な文字クラス・タイプが参照されました。 |
| REG_EESCAPE | 正規表現の最後の文字が ¥ です。 |
| REG_ESUBREG | ¥digit 内の数値が無効、またはエラーです。 |
| REG_EBRACK | [] が不揃いです。 |
| REG_EPAREN | ¥( ¥) または () が不揃いです。 |
| REG_EBRACE | ¥{ ¥} が不揃いです。 |
| REG_BADBR | ¥{ と ¥} の間の式が無効です。 |
| REG_ERANGE | 範囲式に無効なエンドポイントがあります。 |
| REG_ESPACE | メモリー不足です。 |
| REG_BADRPT | ?、*、または + の前に有効な正規表現がありません。 |
| REG_ECHAR | 無効なマルチバイト文字です。 |
| REG_EBOL | 正規表現の先頭に曲折アクセント記号アンカーがありません。 |
| REG_EEOL | $ アンカーが正規表現の末尾にありません。 |
| REG_ECOMP | regcomp() 呼び出し中に不明なエラーが発生しました。 |
| REG_EEXEC | regexec() 呼び出し中に不明なエラーが発生しました。 |
戻り値
regerror() 関数は、エラー条件を記述するストリングを保持するために必要なバッファーのサイズを戻します。 errno の値は ECONVERT (変換エラー) に設定される可能性があります。
例
この例では、無効な正規表現をコンパイルし、
regerror() 関数を使用してエラー・メッセージを出力します。#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
regex_t preg;
char *pattern = "a[missing.bracket";
int rc;
char buffer[100];
if (0 != (rc = regcomp(&preg, pattern, REG_EXTENDED))) {
regerror(rc, &preg, buffer, 100);
printf("regcomp() failed with '%s'\n", buffer);
exit(EXIT_FAILURE);
}
return 0;
/**********************************************************
The output should be similar to:
regcomp() failed with '[] imbalance.'
**********************************************************/
}