Регулярное выражение POSIX с расширенным синтаксисом не совпадает с тем, где оно должно

Я пытаюсь использовать регулярное выражение POSIX в C, но это не работает. Вот мой код:

int regi(char *c, char *e)
{
    regex_t regex;
    int reti = regcomp(&regex, e, 0);
    reti = regexec(&regex, c, 0, NULL, 0);

    if(!reti)
        return 1;

    return 0;
}

int main()
{
   char str[5] = {'0','x','2','F'};

   if(regi(str, "^(0[xX])[0-9a-fA-F]+"))
      // Do stuff

   return 0;
}

Я искал здесь: http://www.peope.net/old/regex.html

Это никогда не входит в оператор if.

2 ответа

Решение

Для того, чтобы использовать + метасимвол, нужно сказать regcomp() что вы используете расширенный синтаксис POSIX:

int reti = regcomp(&regex, e, REG_EXTENDED);

Однако есть несколько других проблем с этим кодом, включая приведение const char* в char*и игнорируя возвращаемое значение regcomp(),

Я никогда не сталкивался с различными разновидностями регулярных выражений, но мне кажется, что базовые регулярные выражения не знают спецификатор +, только *,

Одним из решений является использование расширенных регулярных выражений. Вы должны указать это при составлении регулярного выражения:

reti = regcomp(&regex, e, REG_EXTENDED);

(Я думал так + может быть подражать с "\\{1,\\}" в основных регулярных выражениях, но это не сработало.)

Другие вопросы по тегам