C语言:regexec返回不匹配的字符串,即使字符串匹配模式

jhkqcmku  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(165)

我在C语言中使用正则表达式。我有以下代码:

#include <regex.h>

static char input[] = "00001415_AXI_7_16";

static bool checkSn(char *input)
{
    regex_t regex;

    if (regcomp(&regex, "^\\d{1,8}_[A-Z]{3}_(\\*|\\d{1,3})_(\\*|\\d{1,3})$",
    REG_EXTENDED))
    {
        fprintf(stderr, "Error during creating regex\n");
        return false;
    }
    if (regexec(&regex, input, 0, NULL, 0))
    {
        return false;
    }
    return true;
}

我可以在没有任何警告的情况下编译程序。我可以运行这个程序,但是即使输入字符串匹配正则表达式,函数也会返回false,我显然在一个在线正则表达式测试器上试过。请问哪里出错了?先谢谢你。
我尝试了regcomp函数的几个标志。我尝试了不带“^”和不带“$”的正则表达式,结果都是一样的。

sd2nnvve

sd2nnvve1#

使用REG_EXTENDED标志编译。但是,当前使用的正则表达式是基本正则表达式语法。
您可以更改正则表达式以使用扩展语法,也可以从regcomp函数调用中删除REG_EXTENDED标志。
扩展版本:

if (regcomp(&regex, "^[[:digit:]]{1,8}_[[:upper:]]{3}_(\\*|[[:digit:]]{1,3})_(\\*|[[:digit:]]{1,3})$",
REG_EXTENDED))
{
    fprintf(stderr, "Error during creating regex\n");
    return false;
}

或不包括:

if (regcomp(&regex, "^[0-9]\\{1,8\\}_[A-Z]\\{3\\}_\\(\\*\\|[0-9]\\{1,3\\}\\)_\\(\\*\\|[0-9]\\{1,3\\}\\)$",
0))
{
    fprintf(stderr, "Error during creating regex\n");
    return false;
}

相关问题