Почему регулярное выражение всегда возвращает 1?
Следующая функция проверяет, начинается ли имя переменной с буквы и может иметь предшествующие символы, которые являются буквами/цифрами. Почему возвращаемое значение всегда равно 1 независимо от ввода?
#include <regex.h>
#include <stdio.h>
int validate_var(char *str)
{
regex_t reg;
regcomp(®, "^[a-zA-Z]+[a-zA-Z0-9]*$", 0);
int r = regexec(®, str, 0, NULL, 0);
regfree(®);
return r;
}
int main() {
printf("%d\n", validate_var("abc")); // Reports 1, This makes sense
printf("%d\n", validate_var("17")); // Reports 1, This doesn't make sense
}
Ответы
Ответ 1
Вы используете привязки (^
и $
), но не разрешаете расширенный синтаксис, передавая REG_EXTENDED
в regcomp()
. См. страницу руководства.
Вы должны действительно проверить все возвращаемые значения, где-то из-за ошибки использования синтаксиса должен произойти сбой.
Обратите внимание, что ненулевое значение означает сбой.