[英]Why is regex always true or always false
我正在尝试使用正则表达式来确定提供的文件是否具有 .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(...)
,则任何结果都为 false。 那么,我的代码有什么问题? 我只希望 .csv 评估为真,其他一切为假。
示例(和所需的结果):
您正在使用的正则表达式对于正则表达式风格无效:必须在括号表达式的开始/结束处使用连字符。 此外,您需要对点进行转义,否则它将匹配任何字符。
用
const char *reg = "^[a-zA-Z0-9_-]+\\.csv$";
请参阅C 演示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.