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 search : trouver l'index


Sujet :

Boost C++

  1. #1
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut [boost] Regex search : trouver l'index
    Bonjour à tous,

    Avant tout, je dois vous dire que je viens du monde python / C. Je suis très newbie en C++ et encore plus en Boost, j'ai donc besoin de votre aide pour y voir plus clair.

    J'ai deux soucis avec la librairie boost::regex :

    Je cherche la position des tous les motifs (Avec chevauchement !) correspondant à mon expression régulières.

    J'ai utilisé le morceau de code ci-dessous, pour gérer le chevauchement j'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    start = what[0].second - 1;
    Est-ce propre ou faut-il mieux faire autrement ?

    Deuxième problème, majeur pour moi, comment récupérer la position du motif dans la chaîne ??? Je patauge complètement, j'ai un itérateur mais pas moyen d'avoir cette information.

    Merci pour votre aide,

    Choupi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void testSearch(const boost::regex &ex, const string st) {
     cout << "Searching " << st << endl;
     string::const_iterator start, end;
     start = st.begin();
     end = st.end();
     boost::match_results <std::string::const_iterator> what;
     boost::match_flag_type flags = boost::match_default;
     while(boost::regex_search(start, end, what, ex, flags))
     {
         cout << " " << what.str() << "\n";
         start = what[0].second - 1;
         cout << " " << what.position () << "\n";
     }
    }
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  2. #2
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Bonjour,

    J'ai trouvé une solution... peut-être moche Simplement avoir un itérateur qui n'évolue pas. Et utiliser distance de la librairie standard.

    C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void testSearch(const boost::regex &ex, const string st) {
     cout << "Searching " << st << endl;
     string::const_iterator start, end, start_init;
     start = st.begin();
     start_init = st.begin();
     end = st.end();
     boost::match_results <std::string::const_iterator> what;
     while(boost::regex_search(start, end, what, ex))
     {
         cout << "What string: " << what.str() << "\n";
         cout << "Position: " << distance(start_init,what[0].first) << "\n";
         start = what[0].first + 1;
     }
    }
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Bonjour,
    comme tu utilise les iterator,
    pourquoi as tu besoin de la position?
    sinon, je ne va pas comment faire autrement que t'as methode

  4. #4
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Bonjour,
    comme tu utilise les iterator,
    pourquoi as tu besoin de la position?
    Pour avoir des statistiques sur les positions ou je trouve mon expression régulière dans une séquence (biologie, séquence d'ADN).

    Venant de python, je suis très très heureux d'avoir des itérateurs même si c'est moins intuitif. Puissant C++
    MacOS 10.5 / Ubuntu / C / Python / R
    Pensez au tag résolu

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Choupi Voir le message
    Pour avoir des statistiques sur les positions ou je trouve mon expression régulière dans une séquence (biologie, séquence d'ADN).

    Venant de python, je suis très très heureux d'avoir des itérateurs même si c'est moins intuitif. Puissant C++
    bonne raison.
    Je croyait que c'était pour manipuler des chaîne de caractère. Et la autant rester avec les iterateurs.

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

Discussions similaires

  1. Boost regex search
    Par jmvau54 dans le forum Boost
    Réponses: 2
    Dernier message: 25/10/2012, 11h34
  2. [SQL2K][TSQL] Trouver les indexs portant sur une colonne
    Par maitrebn dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 29/08/2006, 23h09
  3. [Débutant][indexes]Trouver les indexes d'une table
    Par Gromitou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/12/2005, 17h50
  4. [IB5.5] comment trouver les indexes
    Par inconu dans le forum InterBase
    Réponses: 3
    Dernier message: 06/10/2005, 08h45
  5. Regex : search
    Par alex.hitman dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/09/2005, 13h54

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