Ваш шаблон содержит якорь $
, захватывающий группы с (...)
и квантификатор интервалов {m,n}
, поэтому вам нужно передать REG_EXTENDED
методу компиляции regex:
regex_t regex;
int reti;
reti = regcomp(®ex, "([0-9a-fA-F]{8}( |$))+$", REG_EXTENDED); // <-- See here
if (reti)
{
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
reti = regexec(®ex, "00001206 ffffff00 00200800 00001044", 0, NULL, 0);
if (!reti)
{
printf("Match");
}
else if (reti == REG_NOMATCH) {
printf("No match bla bla\n");
}
См. онлайн-демонстрацию C печать Match
.
Однако я считаю, что вам нужно сопоставить всю строку и запретить пробелы в конце, поэтому, вероятно,
reti = regcomp(®ex, "^[0-9a-fA-F]{8}( [0-9a-fA-F]{8})*$", REG_EXTENDED);
будет более точным, так как не будет допускать произвольного текста впереди и не будет завершающего пробела.