Comment trouver du texte entre deux chaînes dans c

J’ai besoin d’extraire le texte entre 2 modèles de chaîne dans c.

Exemple:

aaaaaaTEXT TO EXTRACTaaaaaaaaa PATTERN1= PATTERN2= 

Merci.

    Voici un exemple vivant de comment faire cela

     #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; } 

    La sortie est

     TEXT TO EXTRACT 

    Il suffit d’utiliser strstr() .

    Une première fois pour trouver le marqueur de départ, appelez-le à nouveau avec un pointeur sur le premier caractère après le marqueur de début pour trouver le marqueur de fin:

     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; } } } 

    S’il vous plaît tester ce qui précède pour off-by-one, je l’ai écrit assez rapidement. retourne NULL; }

    Ce ne sera peut-être pas optimal en termes de performances, mais très simple à mettre en œuvre, à bien faire, à lire et à comprendre.

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

    Remarque: si vous ne pouvez pas modifier la chaîne d’origine, copiez-la dans un tampon avec lequel vous pouvez jouer.

    Version alternative:

     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: je n'ai testé aucun code