К своей радости узнал, что в VS2008 появились регулярные выражения TR1 в STL
Подробности тут: A TR1 Tutorial: Regular Expressions
А мне как раз понадобилось на С++ парсить исходники С++ на предмет поиска параметров printf() , имеющих следующий прототип:
Подробности тут: A TR1 Tutorial: Regular Expressions
А мне как раз понадобилось на С++ парсить исходники С++ на предмет поиска параметров printf() , имеющих следующий прототип:
%[flags][width][.precision][length]specifierПосле долгой возни вокруг \t \n вот что у меня получилось:
#include <string>
#include <regex>
// text - printf format input, for instance:
// "Unable to create %s!/nUnsufficient RAM: %3d."
//
// arr - output array of printf format parameters, in this case:
// {"%s", "\n", "%3d"}
int GetPrintfParameter(CString text,CStringArray & arr)
{
text.TrimLeft();
text.TrimRight();
if(text.IsEmpty() )return 0;
std::string prinfFormat = text;
const std::tr1::regex pattern("((%(\\+|-|0|\\#)?(\\d+|\\*)?(.\\d+|.\\*)?(\\d)?(d|i|u|o|x|f|e|g|a|c|s|p|n|\\%))|(\\\\n|\\\\t|\\|))");
const std::tr1::sregex_token_iterator end;
for ( std::tr1::sregex_token_iterator i(prinfFormat.begin(), prinfFormat.end(), pattern);
i != end;
++i )
{
CString sep = (*i).str().c_str();
arr.SetSize(arr.GetSize()+1);
arr[arr.GetSize()-1] = sep;
}
return arr.GetSize();
}
No comments:
Post a Comment