如何匹配字符串的结束字符?
这是我的代码:
int ownRegex(char* str_request, char* str_regex) {
int err;
regex_t preg;
err = regcomp(&preg, str_regex, REG_NOSUB | REG_EXTENDED);
if (!err) {
int match;
match = regexec(&preg, str_request, 0, NULL, 0);
regfree(&preg);
if (!match)
return 0;
else if (match == REG_NOMATCH)
return match;
else {
char *text;
size_t size;
size = regerror(err, &preg, NULL, 0);
text = malloc(sizeof(*text) * size);
if (text) {
regerror (err, &preg, text, size);
fprintf(stderr, "%s\n", text);
free(text);
} else
fprintf(stderr, "im");
exit(errno);
}
}
return err;
}
我要做的是匹配这些行:
“ GET / HTTP / 1.1 ”或“ GET / HTTP / 1.0 ”,因此我使用正则表达式“ ^ GET / HTTP / 1 \。 [01] $ “
因为我不想在HTTP版本之后使用寄生虫词,如“ GET / HTTP / 1.1 blablabla ”。
但是当我使用这个正则表达式时,没有一条线我尝试匹配。
[编辑]
所以这就是我如何调用我的函数:
int match = ownRegex(clientMessage, "^GET / HTTP/1\\.[01]$");
if (match)
printf("400\n");
else
printf("200\n");
(我简化了代码)
这是我试过的线条: `
所以只有两条第一行被认为是正确的,但只有n°3到9才能正确返回,因为我的函数总是返回400.
此外,如果我删除正则表达式中的'$',除了n°7之外,所有行都有正确的返回值。
我希望我澄清了我的问题:)。
[结束编辑]
你知道我做错了吗?
感谢您的阅读,对不起我的英语。
答案 0 :(得分:0)
<强>分辨强>
嗯,感谢@WiktorStribiżew让我意识到的事情,我的char数组总是以'\ r \ n'或'\ n'结尾,而不仅仅是'\ 0'就像文字字符串一样。
所以我只需修改我的正则表达式:
match = ownRegex(clientMessage, "^GET / HTTP/1\\.[01]\r{0,1}\n");
再见。