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 :

QRegExp fâché avec les caractères d'échappement

  1. #1
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 280
    Points : 347
    Points
    347
    Par défaut QRegExp fâché avec les caractères d'échappement
    Bonjour,

    pourrait-on m'expliquer pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QRegExp schema("^\\'");
    ne marche pas?

    Je cherche à utiliser un pattern de recherche correspondant à ce que le caractère d'échappement <\> ne se trouve pas devant le caractère cherché <'> (apostrophe).
    Terminées les prises de tête pour programmer en php. On procède comme ça : http://cavril.developpez.com/php/ (débutants pressés voulant éviter d'approfondir vers la POO)

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    C'est écrit dans la doc : http://qt-project.org/doc/qt-4.8/QRe...-of-characters (Note)

  3. #3
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 280
    Points : 347
    Points
    347
    Par défaut
    J'avais déjà vu ça, et je ne vois pas comment faire pour remplacer des chaines où se trouvent des occurrences du schéma ^\'. J'ai essayé :

    1. [^\']
    2. [^\\']
    3. [^\\\']
    4. [^\\\\']


    J'utilise donc comme convenu la quatrième option mais l'utilisation de replace(apostrophes,"\\'") n'aboutit pas au résultat escompté. La chaine "phrase 'de' test" est non pas remplacée par "phrase \'de\' test", mais par phrasede\'tes\', ce qui veut dire que Qt s'empare d'un caractère à chaque remplacement, comme si l'expression rationnelle eut été plutôt [.\\']. L'utilisation de capturedtext n'aide pas. Je comprends pas.

    EDIT :
    Alors oui pardon donc il est normal que le caractère devant l'apostrophe, soit pris en compte et omis dans le replace. Mais l'utilisation de replace(apostrophes,apostrophes.capturedTexts().at(1)+"\\'"); lorsqu'on utilise le schéma "([^\\\\])'" ne transmet que un espace, ce qui fait que la chaine est remplacée par "phrase \'d \' test". A savoir que ça ne fonctionne que si j'utilise int pos = apostrophes.indexIn(laChaineATraiter); avant le replace.



    texteATraiter.replace(apostrophes,apostrophes.capturedTexts().at(1)+"\\'");


    EDIT :
    Nan en fait j'ai un peu plus approfondi la doc et il se trouve que les replace ne sont pas récurrents et il faut une boucle pour faire les changements. Donc non seulement il faut faire des rébus boueux mais en plus ça automatise rien. Ma solution n'est surement pas la meilleure mais j'essaie de m'éloigner de ces regex cagneux le plus possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        QStringList list;
        QRegExp apostrophes("([^\\\\])'");
        int pos = 0, i = 0;
        while ((pos = apostrophes.indexIn(laNews,pos)) != -1)
        {
            list << apostrophes.cap(1);
            pos += apostrophes.matchedLength();
            texteATraiter.insert(pos,list.at(i));
            texteATraiter.insert(pos-1,"\\");
            texteATraiter.remove(pos+1,1);
            i++;
        }
    Ça marche. Basta. Je préfère ça à du c'est plus parlant.

    Merci pour m'avoir bien aiguillé.
    Terminées les prises de tête pour programmer en php. On procède comme ça : http://cavril.developpez.com/php/ (débutants pressés voulant éviter d'approfondir vers la POO)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/03/2009, 17h05
  2. os.popen est-il fâché avec les caractères Unicode ?
    Par goran kajfes dans le forum PyQt
    Réponses: 1
    Dernier message: 02/05/2008, 13h53
  3. [AJAX] Problèmes avec les caractères accentués
    Par marti dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 26/10/2005, 14h10
  4. Réponses: 5
    Dernier message: 04/09/2005, 12h34
  5. [SAX] Problème avec les caractères spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/07/2005, 10h07

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