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

Discussion :

Problèmes avec les QRegExp et les expressions régulières

  1. #1
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut Problèmes avec les QRegExp et les expressions régulières
    Bonjour,

    Je n'ai jamais utilisé les expressions reguliere et j'ai envie de m'y mettre alors j'ai voulu resoudre un probleme simple avec.

    J'ai une chaine de caractere qui peut etre de cette forme:
    "test::START::test1::STOP::::START::test2::STOP::"

    Ce que je desire c'est pourvoir recuperer les chaine de caractere entre les balise ::START:: et :: STOP::. Dans l'exemple je souhaite donc recuperer "test1" et "test2".

    J'ai fait le bout de code suivant mais ca ne marche pas je pense que mon expressions reguliere est male faite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    QString chaine = "test::START::test1::STOP::::START::test2::STOP::";
    QRegExp rx("START::.::STOP");
     
    QStringList list;
    int pos = 0;
     
     while ((pos = rx.indexIn(chaine, pos)) != -1) {
         list << rx.cap(1);
         pos += rx.matchedLength();
     }
    Ce code ne marche pas. Je m'y prend surement tres mal. Si quelqu'un a la reponse a mon probleme avec une petite explication ce serait vraiment sympas.

    Merci par avance.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  2. #2
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Il manque quelques petites choses.

    "START::.::STOP" va chercher 'START::' suivi d'un seul caractère, puis '::STOP', il faut donc ajouter une '*' derrière le '.' pour lui dire d'accepter plusieurs caractères. (Il faut mettre un '+' au lieu de '*' si on veut s'assurer qu'il y a au moins un caractère).

    Ensuite, si tu veux récupérer la chaîne centrale il faut indiquer ce qu'il faut capturer avec des parenthèses, sinon cap(1) ne va rien renvoyer. Donc la regexp devrait ressembler à Sauf que '.*' matche par défaut autant de caractère qu'il peut (il est gourmand). Donc sur la chaîne en exemple, elle va capturer "test1::STOP::::START::test2", ce qui n'est pas le bon comportement. Il faut utiliser setMinimal() pour lui dire de ne pas capturer au maximum.

    Voila, j'espère que c'était clair. Sinon pour les regexp il y a un outil avec les démos et exemples de Qt (tools/regular expressions) qui permet de tester facilement ses expressions régulières. C'est super pratique.

  3. #3
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Merci Kenji de ta reponse elle m'a permis d'avancer et ca marche super bien. Je comprend un peux mieux les regex maintenant.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 16
    Par défaut
    bonjour
    Merci aussi de m'avoir économiser pl heures de recherche

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/08/2006, 16h46
  2. [Tableaux] Problème avec un array et les pseudo frame
    Par azerty53 dans le forum Langage
    Réponses: 6
    Dernier message: 10/05/2006, 14h57
  3. Problème avec l'unicode et les exceptions
    Par Rafy dans le forum C++
    Réponses: 5
    Dernier message: 07/02/2006, 00h52
  4. problème avec strtok pour récupérer les vides
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 02/06/2005, 20h08

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