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

Boost C++ Discussion :

BOOST :: REGEX PATTERN IMPOSSIBLE ?


Sujet :

Boost C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 35
    Par défaut BOOST :: REGEX PATTERN IMPOSSIBLE ?
    Salut à tous,

    J'ai un soucis avec un pattern que je n'arrive pas à trouver..
    Mon but est d'avoir une regex qui match uniquement les fonctions de ce style :

    nomFonction ( paramètres ) { \\ je me fiche du type de retour, seul le nom m'interresse.

    j'arrive facilement à matcher avec cette regex la :

    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
     
    void test(string& stringFile){
     
        string::iterator start, end;
     
        boost::regex expression(
        "\\w+\\s*\\("
        "[\\s\\w=<>/!%&,:~\\-\\'\\\"\\`\\^\\.\\[\\]\\$\\(\\)\\*\\+\\|\\\\]+\\)\\s*\\{"
        );
     
        start = stringFile.begin();
        end = stringFile.end();
     
        boost::match_results<string::iterator> what;
     
        while(regex_search(start, end, what, expression, boost::format_first_only))
        {
            cout << what[0].str() << endl;
            start = what[0].second;
        }
     
    }//test
    Mais le problème, c'est que je prend aussi tous les if,for,while,switch et compagnie..

    Alors j'ai essayé de dire pour le début de la regex (c'est uniquement ce qui m'interresse ici :p) qu'elle devait prendre tous les "mots" SAUF le mot "if", "while", etc.. pour un mot global car si la fonction se nomme "positif" par exemple je souhaiterais la gardée

    Donc, je n'y arrive pas, j'ai parcourue la doc de PERL toute la journée, les forums et google sans résultat probant.. Alors, es-ce possible de faire cette regex sans avoir a faire un substring et un if (match != "if" && match != "while" etc..)

    Je crack criiiiiiiii.

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Tu peux le faire avec des lookahead. (?!truc)
    Mais bon, c'est crade.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 35
    Par défaut C'est bon j'ai trouvé :)
    Voila merci pour m'avoir mis sur la voie
    En fait, j'ai utilisé les look-behind et je trouve que ce n'est pas si horrible que ça

    Voila la regex qui match n'importe quelle fonction sauf le if, while, for, et switch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
        boost::regex expression(
        "\\w+(?<!\\<if)(?<!\\<while)(?<!\\<switch)(?<!\\<for)"
        "\\s*\\("
        "[\\s\\w=<>/!%&,:~\\-\\'\\\"\\`\\^\\.\\(\\)\\[\\]\\$\\*\\+\\|\\\\]+\\)\\s*\\{"
        );
    Merci en tout cas, c'était pas loin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boost regex : pattern réparti sur deux séquences
    Par vinocell dans le forum Boost
    Réponses: 0
    Dernier message: 31/05/2010, 23h00
  2. Configurer boost / regex.
    Par OrthoMaker dans le forum Boost
    Réponses: 11
    Dernier message: 06/08/2007, 09h34
  3. [regex.Pattern] comment on active CASE_INSENSITIVE ?
    Par ramislebob dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/08/2007, 15h16
  4. [Regex] Pattern matching
    Par jeRame dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/06/2007, 14h28
  5. [regex] pattern pour une methode publique
    Par Invité dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 17/04/2007, 12h57

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