Я пытаюсь использовать регулярное выражение, чтобы определить, имеет ли предоставленный файл расширение .csv.
#include <stdio.h>
#include <regex.h>
int match(const char *string, const char *pattern) {
regex_t re;
if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB) != 0) {
return 0;
}
int status = regexec(&re, string, 0, NULL, 0);
regfree(&re);
if (status != 0) {
return 0;
}
return 1;
}
int main(void) {
const char *reg = "^[a-zA-Z0-9-_]{1,}(.csv)$";
if (!match("test.csv", reg)) {
printf("Not a valid csv file.\n");
} else {
printf("Valid csv file.\n");
}
return 0;
}
Проблема в том, что с match(...)
все оценивается как истинное.Если, с другой стороны, я пытаюсь !match(...)
, что-либо оценивается как ложное.Итак, что не так с моим кодом?Я хочу, чтобы только .csv оценивал значение true, а все остальное - false.
Примеры (и желаемый результат):
- test.csv = true ("Valid csv file.")
- test.abc = false («Неправильный файл CSV.»)