gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:49:05 26 4
gpt4 key购买 nike

我试图编写一个简单的 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/

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