$ J'essaie d'analyser le contenu du fichier avec une expression régulière:std :: regex ne reconnaît pas
ifstream file_stream("commented.cpp",ifstream::binary);
std::string txt((std::istreambuf_iterator<char>(file_stream)),
std::istreambuf_iterator<char>());
cmatch m;
bool result = regex_search(txt.c_str(), m, regex("^#(\S*)$",regex_constants::basic));
Le fichier est source de courant alternatif, et il commence par la ligne:
#include <stdio.h>
J'essaie d'analyser une directive, j'ai vérifié l'expression rationnelle dans regexbuddy et cela fonctionne à 100%, mais dans std :: regex regex_search
renvoie false. Il semble que le caractère $
ne soit pas reconnu par gettinc et aussi ^
pour la syntaxe posix
. J'ai essayé d'utiliser ECMAScript
, et la regex fonctionne, seulement si je supprime $
symbole.
//ecmascript syntax
bool result = regex_search(txt.c_str(), m, regex("^#(\S*)"));
Le fichier est lu en utilisant le drapeau binaire, de sorte que la chaîne txt
, conserve tous les \r\n
caractères qui sont nécessaires pour $
syntaxe. Je cherche de l'aide, comment résoudre ce problème.
Mais '^ # (\ S *) $' '_doesn't_ match de #include'. '\ S' ne correspond qu'aux non-espaces. Il y a des espaces dans '#include ', et vous ne pouvez pas faire correspondre '# include' avec cette regex parce que' $ 'veut s'ancrer à la fin de la ligne. –