如何匹配字符串的结尾字符?C编程 - 如何匹配字符串的结束字符?
这里是我的代码:
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 \ [012] $“
因为我不想在HTTP版本之后寄生一个词,如”GET/HTTP/1.1blablabla“。
但是,当我使用这个正则表达式我没有尝试匹配的行。
[编辑]
因此,这里是我如何调用我的函数:
int match = ownRegex(clientMessage, "^GET/HTTP/1\\.[01]$");
if (match)
printf("400\n");
else
printf("200\n");
(我已经简化了代码)
这里是我试过行: `
- “GET/HTTP/1.1 “ - >返回400,应为200
- ” GET/HTTP/1.0 “ - >返回400,应为200
- ” GET/HTTP/1A1“ - >返回400
- “GET/HTTP/1.2” - >返回400
- “AGET/HTTP/1.1” - >返回400
- “甲GET/HTTP/1.1” - >返回400
- “GET/HTTP/1.1 TEST” - >返回400
- “GET/HTTP // 1.1” - >返回400
- “GET/HTTP/1.1” - >返回400
所以只有两个第一线应该是正确的,但是只有N°3〜9 TE正确的回报,因为我的功能总是返回400
另外,如果我删除“$”在我正则表达式,所有线都有t除了7号之外,他的回报是正确的。
我希望我澄清了我的问题:)。
[编辑完]
你有任何想法,我做错了什么?
感谢您阅读我,并为我的英语感到抱歉。
显示您在C代码中使用的正则表达式字符串。 – pm100
请[编辑]你的问题,并显示[mcve]。你既没有显示正则表达式也没有显示你想匹配的文本。是的,你解释了它是什么,但你必须向我们展示它的代码。 –
'“^ GET/HTTP/1 \\。[01] $”'应该可以工作。您也可以使用'“^ GET/HTTP/1 [。] [01] $”' –