C 正则表达式执行在第一次匹配时停止
我有一段C代码:C 正则表达式执行在第一次匹配时停止,c,regex,C,Regex,我有一段C代码: size_t N_MATCH = 5; regex_t* finder = (regex_t*)malloc(sizeof(regex_t)); if (0 != regcomp(finder, "_v_[0-9]{1,10}", REG_EXTENDED)) { fprintf(stderr, "Error in compiling regular expression\n"); exit(1); } 这个测试字符串:
size_t N_MATCH = 5;
regex_t* finder = (regex_t*)malloc(sizeof(regex_t));
if (0 != regcomp(finder, "_v_[0-9]{1,10}", REG_EXTENDED)) {
fprintf(stderr, "Error in compiling regular expression\n");
exit(1);
}
这个测试字符串:
char* str = " _v_349853242543543532542 some text blabla _v_134567895324 _v_4332 some other text";
但当我执行
regexec(&finder, str1, N_MATCH, match, 0);
结果是,除了0
(或者,换句话说,只弹出一个匹配项)之外,每个i
都有match[i].rm_eo==match[i].rm_so
。
我知道有很多Queston被要求解决这个问题,但如果我能得到我期望的结果,我就不会再问这个问题了。特别是以下是我的(失败的)试验:
regexec
没有g
选项。您必须在循环中调用regexec
。看看这个例子:
看
regcomp(finder, "_v_[0-9]{1,10}?", REG_EXTENDED);
regcomp(finder, "(_v_[0-9]{1,10})?", REG_EXTENDED);
regcomp(finder, "_v_[0-9]{1,10}*", REG_EXTENDED);
regcomp(finder, "(_v_[0-9]{1,10})*", REG_EXTENDED);
regcomp(finder, "_v_[0-9]{1,10}+", REG_EXTENDED);
regcomp(finder, "(_v_[0-9]{1,10})+", REG_EXTENDED);