正規表現
gccです。次のコードを実行すると"cd"にマッチするのは3箇所あるはずなのにreg()のprintfが1回しか実行されません。どこが変なんでしょうか?
#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
#include <string>
int re(std::string text, std::string pattern)
{
size_t nbmatch = 128;
regex_t preg;
regmatch_t pmatch[nbmatch];
if (regcomp(&preg, (char*)pattern.c_str(), REG_EXTENDED||REG_NEWLINE)) return 1;
if (regexec(&preg, (char*)text.c_str(), nbmatch, pmatch, 0)) return 2;
for (int i=0; i<(int)nbmatch && (int)pmatch[i].rm_so>-1 && (int)pmatch[i].rm_eo>-1; i++)
printf("%d to %d (%d chars)\n", (int)pmatch[i].rm_so, (int)pmatch[i].rm_eo, (int)pmatch[i].rm_eo-(int)pmatch[i].rm_so);
return 0;
}
int main()
{
re("abcdefg abcdefg abcdefghijk abcicawd","cd");
return 0;
}
お礼
バージョンは1.8.2でしたが、 上記の方法で出来ましたー どうもありがとうございました。