Начало (^) и конец ($) якоря не работают - PullRequest
0 голосов
/ 27 февраля 2019

В основном я использую следующий шаблон в моей C-программе (см. Регулярное выражение, совпадающее с бесконечным шаблоном ):

^[0-9]( [0-9])*$

со следующим кодом:

char *pattern = "^[0-9]( [0-9])*$";
regex_t regexCompiled;
int rc = regcomp(&regexCompiled, pattern, REG_EXTENDED);
if (rc != 0) {
    char msgbuf[100];
    regerror(rc, &regexCompiled, msgbuf, sizeof (msgbuf));
    fprintf(stderr, "Regex match failed: %s\n", msgbuf);
    exit(EXIT_FAILURE);
}

if (regexec(&regexCompiled, "0 1", 0, NULL, REG_EXTENDED) == 0) {
    printf("Valid\n");
} else {
    printf("Invalid\n");
}

Где я выполняю против строки "0 1", которая действительна для шаблона, и он не работает.'^' И '$' не работают.Это почему?и как я могу заставить его работать?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы передаете REG_EXTENDED на regexec(), это недопустимый флаг для этого вызова.

Страница руководства говорит:

eflagsможет быть побитовым или одним или обоими из REG_NOTBOL и REG_NOTEOL, которые вызывают изменения в поведении сопоставления, описанном ниже.

Возможно, фактическое значение REG_EXTENDED совпадает с одним из них.

Изменение кода для передачи 0 в качестве последнего аргумента на regexec() приводит к его совпадению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...