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.'
**********************************************************/
}

