2011-02-20 1 views
2

je suis en train d'écrire un analyseur robots.txt en C++ce qui est erroné avec mon C++ match regex

boost::regex exrp("^User-agent:\s*(.*)"); 

       boost:: match_results<string::const_iterator> what; 

        if(boost::regex_search(robots, what, exrp)) 

        { 

         string s(what[1].first, what[1].second); 


         cout<< s; 
        } 

cela devrait correspondre au useragent avec le nom * mais il renvoie toutes les données

+0

"données" est déjà pluriel. –

Répondre

4

Vous avez besoin de la double barre oblique inverse '\\' si vous n'utilisez pas de chaînes brutes C++ 0x.

2

Si vous le souhaitez match de neUser-agent: * et non aussi (par exemple) User-agent: webcrawler dont vous avez besoin

"^User-agent:\\s*\\*" 

Le caractère * a une signification particulière, elle doit donc être es capé avec \. Le (.*) dans votre code correspond à zéro ou plusieurs occurrences de n'importe quel caractère et capture la correspondance.

Edit: Vous devez également les backslashs comme l'a souligné bottes en caoutchouc.

+0

ce cas se lirait "^ Utilisateur-agent: \\ s * \\\ *" –

+0

Bon point: fixe. –