J'utilise tr1 :: regex pour essayer d'extraire des correspondances d'une chaîne. Une chaîne exemple pourrait êtretr1 :: regex regex_search problème
asdf werq "one two three" asdf
Et je veux sortir de cette:
asdf
werq
one two three
asdf
avec des choses entre guillemets regroupées, donc je suis en train d'utiliser l'expression rationnelle \"(.+?)\"|([^\\s]+)
. Le code J'utilise est:
cmatch res;
regex reg("\"(.+?)\"|([^\\s]+)", regex_constants::icase);
regex_search("asdf werq \"one two three\" asdf", res, reg);
cout << res.size() << endl;
for (unsigned int i = 0; i < res.size(); ++k) {
cout << res[i] << endl;
}
mais qui sort
3
asdf
asdf
Qu'est-ce que je fais mal?
Comment puis-je obtenir la correspondance comme vous l'avez dit si j'utilise un itérateur? Vous utilisez un itérateur dans le style de (std :: tr1 :: sregex_token_iterator je (str.begin(), str.end(), reg); i! = fin; ++ i) {cout << * i;} Vous n'avez pas vraiment le choix de savoir si vous obtenir la correspondance complète, première capture ou seconde capture, que je peux voir –
Qu'en est-il de ce qui suit: 'for (std :: tr1 :: sregex_token_iterator je (str.begin(), str.end(), reg); ! = fin; ++ i) {cout << ((* i) [1] || (* i) [2]);} '? Je ne peux pas vérifier si cela compile, et encore moins s'il fonctionne, mais l'idée est que '* i' est un objet qui a un opérateur d'indexation, ce qui devrait vous donner les captures. –