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 :

Expression avec boost


Sujet :

Boost C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut Expression avec boost
    Bonsoir,

    N'étant pas très calé en expression régulières, je cherche depuis deux jours à valider et capturer deux sous-chaînes à l'aide de boost et d'expressions régulières, sans succès...

    J'ai ces deux chaines en entrée :
    " Les bébés sont illogiques"
    "Seules les casseroles m'appartenant sont en fer blanc"

    J'aimerais que mon expression me récupère bébés, illogiques dans un cas, et casseroles m'appartenant et en fer blanc dans l'autre.

    J'ai testé cela (qui marche que pour le premier) mais qui me capture la chaîne de bébés à la fin ... C'est possible de contourner ce comportement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::regex pattern_all("^tous les|seuls les |seules les |les (.+) sont (.+)");
    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 84
    Par défaut
    Bonjour,

    Tu as deux erreurs dans ton expression: un problème de priorité et des espaces en trop.
    Ton expression est interprétée comme ça (parenthèse rouges ajoutées pour indiquer les priorités) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(tous les)|(seuls les )|(seules les )|(les (.+) sont (.+))
    Pour que ça marche, il te faut commencer par mettre le début entre parenthèses et ajouter ou supprimer des espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(tous les|seuls les|seules les|les) (.+) sont (.+)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(tous les |seuls les |seules les |les )(.+) sont (.+)
    2 remarques:
    • Évidement, avec tes chaînes en entrée, ceci ne marche que si tu passe l’option boost::regex::icase au constructeur (expression insensible à la casse).
    • Si la capture de la nouvelle sous-expression du début te gêne, tu peux écrire ceci :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ^(?:tous les|seuls les|seules les|les) (.+) sont (.+)
      La forme (?: ... ) permet de ne pas enregistrer la sous-expression pour utilisation ultérieure, tout en forçant les priorités (voir ici).


    Des explications sur cette page.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut
    Merci pour la réponse.
    Pour la chaîne insensible, j'ai oublié de préciser que je met toute ma chaîne en minuscule afin d'éviter ce problème. Je comprend mieux l'erreur.

    Mais j'ai continué dans mon coin ces derniers jours, et j'ai carrément changé de bibliothèque. J'ai changé comme tu as fait mon expression et ca marche. En tout cas, j'ai encore beaucoup d'efforts à faire pour comprendre les expressions régulières.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/01/2011, 11h29
  2. Connection de SQL SERVER 2005 EXPRESS avec HIBERNATE
    Par jerome giraud dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/02/2006, 09h07
  3. probleme de compilation avec boost
    Par doof dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 07/06/2005, 21h38
  4. Calculer un inverse de matrice avec boost?
    Par Clad3 dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 02/06/2005, 18h38
  5. probleme avec boost et devcpp
    Par Krost dans le forum Dev-C++
    Réponses: 12
    Dernier message: 02/01/2005, 19h11

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