C编程 - 如何匹配字符串的结束字符?

时间:2017-03-01 17:22:06

标签: c regex

如何匹配字符串的结束字符?

这是我的代码:

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");

(我简化了代码)

这是我试过的线条: `

  1. GET / HTTP / 1.1 ” - >返回400,应该是200
  2. GET / HTTP / 1.0 ” - >返回400,应该是200
  3. GET / HTTP / 1a1 ” - >返回400
  4. GET / HTTP / 1.2 ” - >返回400
  5. AGET / HTTP / 1.1 ” - >返回400
  6. A GET / HTTP / 1.1 ” - >返回400
  7. GET / HTTP / 1.1 TEST ” - >返回400
  8. GET / HTTP // 1.1 ” - >返回400
  9. GET / HTTP / 1.1 ” - >返回400
  10. 所以只有两条第一行被认为是正确的,但只有n°3到9才能正确返回,因为我的函数总是返回400.

    此外,如果我删除正则表达式中的'$',除了n°7之外,所有行都有正确的返回值。

    我希望我澄清了我的问题:)。

    [结束编辑]

    你知道我做错了吗?

    感谢您的阅读,对不起我的英语。

1 个答案:

答案 0 :(得分:0)

<强>分辨

嗯,感谢@WiktorStribiżew让我意识到的事情,我的char数组总是以'\ r \ n''\ n'结尾,而不仅仅是'\ 0'就像文字字符串一样。

所以我只需修改我的正则表达式:

match = ownRegex(clientMessage, "^GET / HTTP/1\\.[01]\r{0,1}\n");

再见。