如何在c中找到两个字符串之间的文本

我需要在c中提取2个字符串模式之间的文本。

例:

aaaaaaTEXT TO EXTRACTaaaaaaaaa PATTERN1= PATTERN2= 

谢谢。

这是一个如何做到这一点的活生生的例子

 #include  #include  int main(void) { const char *s = "aaaaaaTEXT TO EXTRACTaaaaaaaaa"; const char *PATTERN1 = ""; const char *PATTERN2 = ""; char *target = NULL; char *start, *end; if ( start = strstr( s, PATTERN1 ) ) { start += strlen( PATTERN1 ); if ( end = strstr( start, PATTERN2 ) ) { target = ( char * )malloc( end - start + 1 ); memcpy( target, start, end - start ); target[end - start] = '\0'; } } if ( target ) printf( "%s\n", target ); free( target ); return 0; } 

输出是

 TEXT TO EXTRACT 

只需使用strstr()

首先找到开始标记,然后使用指向开始标记后第一个字符的指针再次调用它,以找到结束标记:

 char * extract_between(const char *str, const char *p1, const char *p2) { const char *i1 = strstr(str, p1); if(i1 != NULL) { const size_t pl1 = strlen(p1); const char *i2 = strstr(i1 + pl1, p2); if(p2 != NULL) { /* Found both markers, extract text. */ const size_t mlen = i2 - (i1 + pl1); char *ret = malloc(mlen + 1); if(ret != NULL) { memcpy(ret, i1 + pl1, mlen); ret[mlen] = '\0'; return ret; } } } 

请仔细测试上面的内容,我写得很快。 返回NULL; }

这可能不是性能上的最佳,但对于实现,正确,阅读和理解都非常简单。

 char * start = strstr(PATTERN1, text); char * end = strstr(PATTERN2, text); if (end == NULL || start == NULL) return; *end = '\0'; printf("%s\n", start); 

注意:如果您无法修改原始字符串,请将其复制到您可以使用的缓冲区中。

替代版本:

 char * start = strstr(PATTERN1, text); char * end = strstr(PATTERN2, text); if (end == NULL || start == NULL) return; int len = end - start; if (len <= 0) return; char * parsed = (char *)calloc(len+1, sizeof(char)); if (parsed == NULL) return; memcpy(parsed, start, len); printf("%s\n", parsed); free(parsed); 

ps:我还没有测试过任何代码