pcre соответствует всем группам в C - PullRequest
1 голос
/ 16 октября 2011

Я хочу рекурсивно сопоставлять группу с использованием библиотеки PCRE C.

, например

pattern = "(\d,)"
subject = "5,6,3,2,"
OVECCOUNT = 30

pcrePtr = pcre_compile(pattern, 0, &error, &erroffset, NULL);
rc = pcre_exec(pcrePtr, NULL, subject, (int)strlen(subject), 
0, 0, ovector, OVECCOUNT);

RC = -1 ..

Как сопоставить все группы так, чтобы совпадения были «5», «6», «3», «2»,

Для аналогии, PHP preg_match_all анализирует всю строку до конца темы ...

Ответы [ 2 ]

0 голосов
/ 18 октября 2011

Любой способ, которым я использовал strtok, так как "," повторялся после каждой группы.

Решение с использованием pcre приветствуется ....

0 голосов
/ 16 октября 2011

Попробуйте:

pcre *myregexp;
const char *error;
int erroroffset;
int offsetcount;
int offsets[(0+1)*3]; // (max_capturing_groups+1)*3
myregexp = pcre_compile("\\d,", 0, &error, &erroroffset, NULL);
if (myregexp != NULL) {
    offsetcount = pcre_exec(myregexp, NULL, subject, strlen(subject), 0, 0, offsets, (0+1)*3);
    while (offsetcount > 0) {
        // match offset = offsets[0];
        // match length = offsets[1] - offsets[0];
        if (pcre_get_substring(subject, &offsets, offsetcount, 0, &result) >= 0) {
            // Do something with match we just stored into result
        }
        offsetcount = pcre_exec(myregexp, NULL, subject, strlen(subject), 0, offsets[1], offsets, (0+1)*3);
    } 
} else {
    // Syntax error in the regular expression at erroroffset
}

Я считаю, что комментарии говорят сами за себя?

...