我正在尝试使用正则表达式来确定提供的文件是否具有.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(...)
时,任何结果都为true。另一方面,如果我尝试!match(...)
,则任何结果都为false。那么,我的代码有什么问题呢?我只想将.csv评估为true,其他所有条件都为false。
示例(以及所需的结果):
答案 0 :(得分:1)
您使用的正则表达式对正则表达式风格无效:连字符必须在方括号表达式的开头/结尾使用。另外,您需要转义点,否则它将匹配任何字符。
使用
const char *reg = "^[a-zA-Z0-9_-]+\\.csv$";
请参见C demo。