2017-03-01 89 views
-1

如何匹配字符串的结尾字符?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"); 

(我已经简化了代码)

这里是我试过行: `

  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. 甲GET/HTTP/1.1” - >返回400
  7. GET/HTTP/1.1 TEST” - >返回400
  8. GET/HTTP // 1.1” - >返回400
  9. GET/HTTP/1.1” - >返回400

所以只有两个第一线应该是正确的,但是只有N°3〜9 TE正确的回报,因为我的功能总是返回400

另外,如果我删除“$”在我正则表达式,所有线都有t除了7号之外,他的回报是正确的。

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

[编辑完]

你有任何想法,我做错了什么?

感谢您阅读我,并为我的英语感到抱歉。

+1

显示您在C代码中使用的正则表达式字符串。 – pm100

+0

请[编辑]你的问题,并显示[mcve]。你既没有显示正则表达式也没有显示你想匹配的文本。是的,你解释了它是什么,但你必须向我们展示它的代码。 –

+0

'“^ GET/HTTP/1 \\。[01] $”'应该可以工作。您也可以使用'“^ GET/HTTP/1 [。] [01] $”' –

回答

0

议决

好了,感谢@WiktorStribiżew谁使我意识到的东西,我的字符数组总是以结束 '\ r \ n''\ n'不仅“\ 0 '就像一个文字字符串。

所以我不得不改变我的正则表达式:

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

再见。