删除C中字符串的一部分(正则表达式?)

删除C中字符串的一部分(正则表达式?),c,regex,string,parsing,proxy,C,Regex,String,Parsing,Proxy,我有一个长字符串,其中包含以下信息: // assume buffer contains the long input string char *pBegin; char *pEnd; pBegin = strstr(buffer, "Keep-Alive:"); if (pBegin) { pEnd = strstr(pBegin, "\r\n"); if (pEnd) strcpy(pBegin, pEnd+2); } “获取http://www.goog

我有一个长字符串,其中包含以下信息:

// assume buffer contains the long input string
char *pBegin; 
char *pEnd;
pBegin = strstr(buffer, "Keep-Alive:");
if (pBegin)
{
    pEnd = strstr(pBegin, "\r\n");
    if (pEnd)
        strcpy(pBegin, pEnd+2);
}
“获取http://www.google.se/ HTTP/1.1\r\n
主机:www.google.se\r\n
用户代理:Mozilla/5.0(X11;Linux x86_64;rv:2.0)Gecko/20100101 Firefox/4.0\r\n
接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
接受语言:en-us,en;q=0.5\r\n
接受编码:gzip,deflate\r\n接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n
保持活动状态:115\r\n
代理连接:保持活动\r\n
Cookie:PREF=ID=7d6a62c557413bc8:FF=0:TM=1327968040:LM=1327968040:S=U1A51rCRDDMTF295\r\n
缓存控制:最大年龄=0\r\n\r\n“
我想去掉代理连接下的保持活动部分。。 这就是我目前正在做的:

  • 将字符串(标题)放入函数中
  • 使用两个字符串(头和主机)创建结构
  • 将标题中的主机名放入主机部分(显然)
  • 并将收割台放入收割台部分
  • 现在,我想在将头放入结构的头部分之前,先去掉保持活动的部分

    有什么想法吗

    这是我到目前为止所做的一些代码。我是C新手,所以可能不是你见过的最漂亮的代码

    struct ParsedHeader header_parser(char * input) {
      struct ParsedHeader h;
      int status;
      regex_t regex;
      char * result_begin = NULL;
    
      regcomp(&regex, "host:", REG_EXTENDED|REG_ICASE|REG_NOSUB);
      if((status = regexec(&regex, input, (size_t) 0, NULL, 0)) == 0) {
        char end = '\r';
        char * header = malloc(strlen(input));
    
        char * begin = "host:";
    
        size_t result_size = 0;
        memcpy(header, input, strlen(input));
        to_lower(input, header, strlen(input));
        result_begin = (strstr(header, begin) + 6);
    
        char * result_end = strchr(result_begin, end);
        result_end[0] = '\0';
        //char result[strlen(result_begin)] = result_begin;
        free(header);
      }
      regfree(&regex);
    
      h.header = input;
      h.host = result_begin;
    
      return h;
    }
    

    如果我正确理解您的问题,您只想删除“Keep Alive”字符串。这样做:

    // assume buffer contains the long input string
    char *pBegin; 
    char *pEnd;
    pBegin = strstr(buffer, "Keep-Alive:");
    if (pBegin)
    {
        pEnd = strstr(pBegin, "\r\n");
        if (pEnd)
            strcpy(pBegin, pEnd+2);
    }
    
    但是,如果要从代理连接头中删除“保持活动”字符串,则可以使用类似的解决方案:

    char *pBegin; 
    char *pEnd;
    pBegin = strstr(buffer, "Proxy-Connection:");
    if (pBegin)
    {
        pBegin = strstr(pBegin, "keep-alive");
        if (pBegin)
            strcpy(pBegin, pBegin+strlen("keep-alive"));
    }
    

    如果您在此处发布代码中最相关的部分,这个问题可能会引起更多关注。是否要删除此特定的
    KeepAlive:115
    行,或KeepAlive的任何可能值?错误:将malloc更改为malloc(strlen(输入)+1)因为您需要为终止null分配空间。我想您理解错了:“我想去掉代理连接下的保持活动的部分”。这似乎他更愿意修改
    代理连接
    头。我解决了seg故障。只是大小写的问题。但是它仍然不起作用。。保持活力的部分还在里面!这很可能是区分大小写的,因为strstrstr函数是区分大小写的。如果可以先将整个字符串小写,然后始终将小写传递给strstrstr,则可以解决此问题。