Regexp in C - match group

后端 未结 3 908
[愿得一人]
[愿得一人] 2021-01-15 04:25

I\'ve been struggling with regular expressions in C (just /usr/include/regex.h).


I have (let\'s say) hundreds of regexps and one of them can match

3条回答
  •  心在旅途
    2021-01-15 04:39

    I assume your regex_match is some combination of regcomp and regexec. To enable grouping, you need to call regcomp with the REG_EXTENDED flag, but without the REG_NOSUB flag (in the third argument).

    regex_t compiled;
    regcomp(&compiled, "(match1)|(match2)|(match3)", REG_EXTENDED);
    

    Then allocate space for the groups. The number of groups is stored in compiled.re_nsub. Pass this number to regexec:

    size_t ngroups = compiled.re_nsub + 1;
    regmatch_t *groups = malloc(ngroups * sizeof(regmatch_t));
    regexec(&compiled, str, ngroups, groups, 0);
    

    Now, the first invalid group is the one with a -1 value in both its rm_so and rm_eo fields:

    size_t nmatched;
    for (nmatched = 0; nmatched < ngroups; nmatched++)
        if (groups[nmatched].rm_so == (size_t)(-1))
            break;
    

    nmatched is the number of parenthesized subexpressions (groups) matched. Add your own error checking.

提交回复
热议问题