如何在C中两个字符串之间查找文本

Fco*_*esa 1 c string ansi char strstr

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

例:

aaaaaa<BBBB>TEXT TO EXTRACT</BBBB>aaaaaaaaa

PATTERN1=<BBBB>
PATTERN2=</BBBB>
Run Code Online (Sandbox Code Playgroud)

谢谢。

unw*_*ind 5

只需使用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;
     }
    }
  }
Run Code Online (Sandbox Code Playgroud)

请对上面的内容进行逐一测试,我写得很快。返回NULL; }

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


Vla*_*cow 5

这是一个生动的例子

#include <stdio.h>
#include <string.h>

int main(void)
{
    const char *s = "aaaaaa<BBBB>TEXT TO EXTRACT</BBBB>aaaaaaaaa";

    const char *PATTERN1 = "<BBBB>";
    const char *PATTERN2 = "</BBBB>";

    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;
}
Run Code Online (Sandbox Code Playgroud)

输出是

TEXT TO EXTRACT
Run Code Online (Sandbox Code Playgroud)