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

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 68
    Points
    68
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    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 du Club
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 68
    Points
    68
    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 chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    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 413
    Points : 1 993
    Points
    1 993
    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?
    Bien le bonjour chez vous
    Jowo

  5. #5
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 68
    Points
    68
    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 chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    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 413
    Points : 1 993
    Points
    1 993
    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?
    Bien le bonjour chez vous
    Jowo

  7. #7
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Points : 68
    Points
    68
    Par défaut
    bah justement c'est ce que je fais avec la fonction que je présente dans mon premier post, ça fonctionne mais je voulais savoir si il n'y avait pas une fonction toute bête pour faire ça

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    si tu es sur *n*x tu peux faire avec sed...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 109
    Points
    109
    Par défaut
    tu peux utiliser pcre(perl compatible regular expression) ici
    While I breath, I hope.

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