gpt4 book ai didi

c - 为什么正则表达式总是真或总是假

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:23 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式来确定提供的文件是否具有 .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 评估为真,其他所有评估为假。

示例(和期望的结果):

  • test.csv = true(“有效的 csv 文件。”)
  • test.abc = false(“不是有效的 csv 文件。”)

最佳答案

您使用的正则表达式对于正则表达式风格无效:必须在方括号表达式的开头/结尾使用连字符。此外,您需要转义点,否则它将匹配任何字符。

使用

const char *reg = "^[a-zA-Z0-9_-]+\\.csv$";

参见 C demo .

关于c - 为什么正则表达式总是真或总是假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55106106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com