Bonjour,
pourrait-on m'expliquer pourquoi
ne marche pas?Code:QRegExp schema("^\\'");
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).
Version imprimable
Bonjour,
pourrait-on m'expliquer pourquoi
ne marche pas?Code:QRegExp schema("^\\'");
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).
C'est écrit dans la doc : http://qt-project.org/doc/qt-4.8/QRe...-of-characters (Note) ;)
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é :
- [^\']
- [^\\']
- [^\\\']
- [^\\\\']
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 :
Ça marche. Basta. Je préfère ça à du :furieux: c'est plus parlant.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13QStringList 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++; }
Merci pour m'avoir bien aiguillé. :ccool: