我正在尝试编写一个简单的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(®ex, path, 0, NULL, 0);
if (!reti) {
return 1;
} else if (reti == REG_NOMATCH) {
return 0;
} else {
char msgbuf[100];
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
printf("Regex match failed: %s\n", msgbuf);
return 0;
}
}
static void init_accpetable_format() {
if (regcomp(®ex, "\\.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。但为什么它不起作用?
答案 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/