繁体   English   中英

为什么正则表达式总是正确或总是错误

[英]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 评估为真,其他一切为假。

示例(和所需的结果):

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

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

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

请参阅C 演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM