Je viens de commencer à utiliser Boost :: regex aujourd'hui et je suis assez novice dans les expressions régulières. J'ai utilisé "The Regulator" et Expresso pour tester mon regex et sembler satisfait de ce que je vois là-bas, mais le transfert de cette regex pour booster, ne semble pas faire ce que je veux qu'il fasse. Toute indication pour m'aider à trouver une solution serait la bienvenue. En tant que question secondaire, y at-il des outils qui pourraient m'aider à tester mon regex contre boost.regex?Boost regex ne fonctionne pas comme prévu dans mon code
using namespace boost;
using namespace std;
vector<string> tokenizer::to_vector_int(const string s)
{
regex re("\\d*");
vector<string> vs;
cmatch matches;
if(regex_match(s.c_str(), matches, re)) {
MessageBox(NULL, L"Hmmm", L"", MB_OK); // it never gets here
for(unsigned int i = 1 ; i < matches.size() ; ++i) {
string match(matches[i].first, matches[i].second);
vs.push_back(match);
}
}
return vs;
}
void _uttokenizer::test_to_vector_int()
{
vector<string> __vi = tokenizer::to_vector_int("0<br/>1");
for(int i = 0 ; i < __vi.size() ; ++i) INFO(__vi[i]);
CPPUNIT_ASSERT_EQUAL(2, (int)__vi.size());//always fails
}
Mise à jour (Merci à Dav pour me aider préciser ma question): J'espérais obtenir un vecteur avec 2 chaînes en eux => "0" et "1". Au lieu de cela, je n'obtiens jamais de succès avec regex_match() (regex_match() renvoie toujours false) donc le vecteur est toujours vide.
Merci '1800 INFORMATION' pour vos suggestions. La méthode to_vector_int()
ressemble maintenant à ceci, mais elle entre dans une boucle sans fin (j'ai pris le code que vous avez donné et l'ai modifié pour la rendre compilable) et trouve "0", "", "", "" et ainsi de suite. Il ne trouve jamais le "1".
vector<string> tokenizer::to_vector_int(const string s)
{
regex re("(\\d*)");
vector<string> vs;
cmatch matches;
char * loc = const_cast<char *>(s.c_str());
while(regex_search(loc, matches, re)) {
vs.push_back(string(matches[0].first, matches[0].second));
loc = const_cast<char *>(matches.suffix().str().c_str());
}
return vs;
}
En toute honnêteté, je ne pense pas avoir encore compris les bases de la recherche d'un motif et de l'obtention des correspondances. Y a-t-il des tutoriels avec des exemples qui l'expliquent?
Il serait utile que vous expliquiez exactement ce qui ne fonctionnait pas comme prévu - quels résultats obtenez-vous, qu'attendez-vous? – Amber
Merci Dav. J'espère avoir ajouté suffisamment d'informations à ma question. – ossandcad