Regex терпит неудачу в C, онлайн тесты проходят - PullRequest
2 голосов
/ 05 июля 2019

Регулярное выражение, которое должно работать, не работает, когда я использую его в C.

Когда я вставляю это регулярное выражение здесь - https://regex101.com и проверяю его, все выглядит нормально, как и ожидалось.

//clang 3.8.0

#include  <stdio.h>
#include  <regex.h>

int main(void)
{
   char    *regPatt = regPatt = "^HR(\\d{2})$";
   regex_t  regex;
   short    retval = regcomp (&regex, regPatt, 0);
   short    status = regexec (&regex, "HR16", (size_t) 0, NULL, 0);

   printf ("%hd", status);

   regfree (&regex);
}

Итак, онлайн-тест работает нормально.

Regex - ^ HR (\ d {2}) $

Строка - HR16

Например, https://regex101.com все в порядке, я получаю совпадение.

В моем коде это не удается. Значение, напечатанное с помощью printf (), равно 1 (REG_NOMATCH).

edit - код можно вставить для теста здесь: https://rextester.com/l/c_online_compiler_gcc

1 Ответ

7 голосов
/ 05 июля 2019

Вы должны использовать [0-9] вместо \d и передать REG_EXTENDED в функцию regcomp.

REG_EXTENDEDИспользуйте синтаксис POSIX Extended Regular Expression при интерпретации регулярных выражений.Если не задан, используется синтаксис POSIX Basic Regular Expression.

Вот обновленный код :

#include  <stdio.h>
#include  <regex.h>

int main(void)
{
   char    *regPatt = regPatt = "^HR([0-9]{2})$";
   regex_t  regex;
   short    retval = regcomp (&regex, regPatt, REG_EXTENDED);
   short    status = regexec (&regex, "HR16", (size_t) 0, NULL, 0);
   printf ("%hd", status);
   regfree (&regex);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...