C++で淡々とregex.hを使ってみた その2
続いてregexecで実際に正規表現をあててみよう.
#include <regex.h> #include <iostream> int main(void) { char target[] = "abcdefghijklhmopqrstuvwxyz"; regex_t reg; int errcode = regcomp(®, "ijl", REG_EXTENDED); if (errcode != 0) { char errbuf[100]; regerror(errcode, ®, errbuf, sizeof(errbuf)); std::cout << "regcompile error: " << errbuf << std::endl; regfree(®); return 1; } regmatch_t match; errcode = regexec(®, target, 1, &match, 0); if (errcode != 0) { char errbuf[100]; regerror(errcode, ®, errbuf, sizeof(errbuf)); std::cout << "regexec error: " << errbuf << std::endl; regfree(®); return 1; } regfree(®); return 0; }
エラーが出た場合の扱いはregcompileと同じ. ただし, パターンが発見出来なかった場合もエラー扱い(REG_NOMATCH). "regexec error: No match"となるはず.
regexecの第4引数はregmatch_tの配列を受けとることになっている. 第3引数はその格納数である. これはパターンが"()"で囲まれたグループを用いた場合に必要らしい. グループはPOSIX拡張でサポートされている.