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

标签 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");
}

我希望我的程序返回“可接受”,但它返回“ Not Acceptable ”。如果我将我的正则表达式设置为“\.JPG$”,结果将变得“可接受”。

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

最佳答案

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

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

关于c - 问号 (?) 在正则表达式中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27054432/

相关文章:

c - 调试 C 中的字符串替换函数

c - 在 C 中将字符串解析为 typedef 结构

c++ - DebugActiveProcessStop 使正在调试的应用程序崩溃

c - 将输入中的奇数位和偶数位相加并进行比较。如果两者相等则打印 stat1 否则打印 stat2

regex - 通过引用捕获重复组

regex - 删除最后一次出现的字符

php - preg_offset_capture 子数组的顺序*保证*增加偏移量吗?

c - 如何将大十进制值转换为二进制

java - 验证电子邮件(不发送确认)

java - 正则表达式 (java) 在单词之后只有空格或行尾