C++で淡々とregex.hを使ってみた その1

boostの正規表現ライブラリを使っていたのだが, Cライブラリであるregex.hで代替できないか試してみる. ひとまずは以下のページを参考にした.

http://sometime.minidns.net/programming/c/posix_regex.html
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/regex.3.html

まずは基本である正規表現パターンバッファの作成とエラー時の対応について.

#include <regex.h>
#include <iostream>

int main(void)
{
    regex_t reg;
    const int errcode(regcomp(&reg, "[ijk", REG_EXTENDED));
    if (errcode != 0)
    {   
        char errbuf[100];
        regerror(errcode, &reg, errbuf, sizeof(errbuf));
        std::cout << "regcompile error: " << errbuf << std::endl;
    }
    regfree(&reg);
    return 0;
}

これは失敗する例. "regcompile error: Unmatched [ or [^"のようになればOK. regcompileでパターンを作成して, 返り値が0でなければなんらかのエラーなので, regerrorでエラー内容を文字列として得る. 後はregfreeでバッファを開放すれば良いみたい.

"regex.h"であって"regexp.h"ではないのでそこんとこだけ注意w