就像卡西米尔和伊波利特所说:你需要逃离?
当我发表评论时,我没有注意到这一点。问题是你使用了字符串文字,这意味着你必须转义转义。
EDIT正如用户 kdhp 正确指出的那样:?
是基本正则表达式的 Gnu 扩展。但问题仍然是一样的:需要对 C 文字中的转义进行转义。
#include <stdio.h>
#include <regex.h>
int main(int argc, char **argv) {
regex_t regex;
// Gnu extension
// int rtn = regcomp(®ex, "LOG[1248AFM]\\?(",0);
// Basic regular expression
int rtn = regcomp(®ex, "LOG[1248AFM]\\{0,1\\}(",0);
if (rtn) {
printf("compile failed\n");
return(1);
}
char *str1 = " LOG(";
char *str2 = " LOGM(";
char *str3 = " LOG";
char *str4 = " LOGJ(";
int rtn1 = regexec(®ex, str1, 0, NULL, 0);
int rtn2 = regexec(®ex, str2, 0, NULL, 0);
int rtn3 = regexec(®ex, str3, 0, NULL, 0);
int rtn4 = regexec(®ex, str4, 0, NULL, 0);
printf("str1: %d\nstr2: %d\nstr3: %d\nstr4: %d\n",
rtn1, rtn2, rtn3, rtn4);
return(0);
}
Gives
str1: 0
str2: 0
str3: 1
str4: 1