IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Rechercher et Remplacer chaîne grâce à un regex ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut Rechercher et Remplacer chaîne grâce à un regex ?
    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

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Voici un tutoriel écrit par Nicolas Joseph concernant l'utilisation des expressions rationnellles en C:


    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut
    C'est bien gentil mais j'ai déjà lu ce tuto et il ne répond pas à ma question

  4. #4
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par ViRouF
    C'est bien gentil mais j'ai déjà lu ce tuto et il ne répond pas à ma question
    En quoi, la réponse de Thierry ne te convient pas?

  5. #5
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut
    Le tutorial est très bien fait mais il permet de savoir si un motif est présent dans une chaine, et d'extraire un motif d'une chaine, pas de remplacer un motif par une chaine, d'ou ma question afin de savoir si c'était possible, avec une fonction de regex.h ou autre, car je n'ai rien trouvé de mon côté

  6. #6
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par ViRouF
    Le tutorial est très bien fait mais il permet de savoir si un motif est présent dans une chaine, et d'extraire un motif d'une chaine, pas de remplacer un motif par une chaine, d'ou ma question afin de savoir si c'était possible, avec une fonction de regex.h ou autre, car je n'ai rien trouvé de mon côté
    Si tu peux extraire un motif, avec un peu de programmation, tu peux aussi le remplacer. non?

Discussions similaires

  1. Rechercher et remplacer à l'aide de regex
    Par tenrev dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 22/05/2013, 21h43
  2. Rechercher et remplacer chaîne de caractères
    Par ponpon17430 dans le forum VBScript
    Réponses: 2
    Dernier message: 06/03/2012, 14h10
  3. [RegEx] Positions des sous-chaînes grâce aux regex
    Par oneTime dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2008, 13h57
  4. Réponses: 5
    Dernier message: 18/06/2008, 15h11
  5. [RegEx] Recherche et Remplacement d'une chaîne dans un fichier
    Par jpascal dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2007, 19h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo