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 正規表現の最後の文字が &#xa5; です。
REG_ESUBREG &#xa5;digit 内の数値が無効、またはエラーです。
REG_EBRACK [] が不揃いです。
REG_EPAREN &#xa5;( &#xa5;) または () が不揃いです。
REG_EBRACE &#xa5;{ &#xa5;} が不揃いです。
REG_BADBR &#xa5;{ と &#xa5;} の間の式が無効です。
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.'
 **********************************************************/
}

関連情報