删除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“
我想去掉代理连接下的保持活动部分。。
这就是我目前正在做的:
struct ParsedHeader header_parser(char * input) {
struct ParsedHeader h;
int status;
regex_t regex;
char * result_begin = NULL;
regcomp(®ex, "host:", REG_EXTENDED|REG_ICASE|REG_NOSUB);
if((status = regexec(®ex, 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(®ex);
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,则可以解决此问题。