问号(?)在正则表达式中不起作用

时间:2014-11-21 05:01:40

标签: c regex

我正在尝试编写一个简单的c程序来检查路径名是否有" .jpg"或" .jpeg"后缀。这是我的计划:

#include <stdio.h>
#include <string.h>
#include <regex.h>

regex_t regex;

static int is_acceptable_format(const char *path) {
    int reti = regexec(&regex, path, 0, NULL, 0);

    if (!reti) {
        return 1;
    } else if (reti == REG_NOMATCH) {
        return 0;
    } else {
        char msgbuf[100];
        regerror(reti, &regex, msgbuf, sizeof(msgbuf));
        printf("Regex match failed: %s\n", msgbuf);

        return 0;
    }
}

static void init_accpetable_format() {
    if (regcomp(&regex, "\\.JP(E?)G$", REG_ICASE)) {
        printf("Could not compile regex\n");
    }
}

main()
{
    const char *path = "/sample_img.jpg";
    init_accpetable_format();
    printf("path=\"%s\" is %s\n",
        path, is_acceptable_format(path) ? "acceptable" : "unacceptable");
}

我希望我的程序可以返回&#34;可接受&#34;但它又回来了#34;不可接受的&#34;代替。如果我将我的正则表达式设为&#34; \。JPG $&#34;,结果就变得可以接受&#34;。

我认为正则表达式中的问号(?)表示0或1次regex rule。但为什么它不起作用?

1 个答案:

答案 0 :(得分:3)

?是扩展的POSIX正则表达式的一部分,而不是基本的POSIX正则表达式:http://en.wikipedia.org/wiki/Regular_expression#POSIX_basic_and_extended

因此,您需要将标记REG_EXTENDED添加到regexcomp,如下例所示:http://www.lemoda.net/c/unix-regex/