Aloha à tous.
Dites j'ai un petit soucis de programmation en C++ avec boost et les regex (je découvre en même temps), j'explique mon soucis :
- Dans un premier temps je dois faire un programme qui se comporte comme une commande en ligne, c'est à dire executable plus les options qui suivent, et pour cela j'utilise :
Code:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
return 0;
}
Je sais comment fonctionne argc et argv, sur ce point pas de soucis.
Dans un second temps, je dois récuperer toutes les options dans un std::string, ce que je fait :
Code:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
std::string buffer = "";
for (int i = 1; i <argc; i++) {
buffer.append(argv[i]);
buffer.append(" ");
}
buffer.shrink_to_fit();
return 0;
}
Avec ce code, il me met bien tout les options dans buffer, séparer par un espace.
Maintenant viens le plus compliqué : Prenons un exemple, je veut taper par exemple hello.exe --world --poire --pomme et tester avec un regex si --poire est dans la liste. Pour ce faire j'ai tester :
Code:
#include <iostream>
#include <boost/regex.hpp>
using namespace std;
int main(int argc, char *argv[]) {
std::string buffer = "";
boost::regex expr;
for (int i = 1; i <argc; i++) {
buffer.append(argv[i]);
buffer.append(" ");
}
buffer.shrink_to_fit();
expr.assign("--poire"); // Ici je met la regex, pas très compliqué vu que je cherche une chaine bien précise
cout << boost::regex_match(buffer, expr) << endl; // la j'affiche 0 si pas trouvé et 1 si trouvé
return 0;
}
Dans notre cas, le resultat est toujours 0 quelques soit les options données. La je coince un peu, j'ai repris l'exemple de la docs officiels qui elle marche. Je soupçonne ma regex mais sans etre sur.
https://theboostcpplibraries.com/boost.regex
Quelqu'un aurait une petite idée comment faire ?
Merci d'avance.