Регулярное выражение POSIX с расширенным синтаксисом не совпадает с тем, где оно должно
Я пытаюсь использовать регулярное выражение POSIX в C, но это не работает. Вот мой код:
int regi(char *c, char *e)
{
regex_t regex;
int reti = regcomp(®ex, e, 0);
reti = regexec(®ex, 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(®ex, e, REG_EXTENDED);
Однако есть несколько других проблем с этим кодом, включая приведение const char*
в char*
и игнорируя возвращаемое значение regcomp()
,
Я никогда не сталкивался с различными разновидностями регулярных выражений, но мне кажется, что базовые регулярные выражения не знают спецификатор +
, только *
,
Одним из решений является использование расширенных регулярных выражений. Вы должны указать это при составлении регулярного выражения:
reti = regcomp(®ex, e, REG_EXTENDED);
(Я думал так +
может быть подражать с "\\{1,\\}"
в основных регулярных выражениях, но это не сработало.)