Bonjour,


Comment faire pour rechercher et remplacer une chaine grâce aux regex en C ? Je cherche à remplacer des chaines de la forme :[a-z] par un ? dans un char*, mais la solution surlaquelle je suis parti me semble bien compliquée ...

Actuellement, j'isole la chaine :[a-z] et je la remplace grâce à la fonction ci-dessous que j'ai trouvé sur le forum :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
char * str_remplace (const char *s, unsigned int start, unsigned int length, const char *ct){
    char *new_s = NULL;
 
    if (s && ct) {
 
        size_t size = strlen (s);
 
        /* Tester start, length >= 0 est inutile, ils sont unsigned... */
        if ( start + length <= size) {
            /* Allocation de la nouvelle taille -> +1 pour le \0 de fin */
            new_s = (char*)malloc (size - length + strlen (ct) + 1);
 
            if (new_s) {
                /* Copie du debut */
                memmove (new_s, s, start);
                /* Copie du remplacement */
                memmove (new_s + start, ct, strlen (ct));
                /* Copie de la fin -> +1 pour le '\0' */
                memmove (new_s + (start + strlen (ct)),
                         s + (start + length),
                         strlen(s+start+length) + 1);
            }
            else {
                fprintf (stderr, "Memoire insuffisante\n");
                return NULL;
            }
        }
    }
    return new_s;
}
J'ai vu qu'en cpp, dans la librairie boost, une fonction existait pour faire ça assez simplement, alors je vous pose la question : qu'en est il pour le C ?


Merci