#include #include #include #include #include using namespace boost::spirit; int main() { std::string raw = "d(MY_DPAR_01,-10.3,12.8,100), d(0,-10.3,12.8,100), i(SOME_IPAR_17, 0,5), b(SOME_BPAR)"; std::vector > variableDescriptions; using ascii::space; using qi::char_; using ascii::alnum; using qi::phrase_parse; qi::rule varSpec = +(alnum | '_' | ',' | '.' | '+' | '-'); qi::rule(), ascii::space_type> varString = char_("dfib") >> '(' >> varSpec >> ')'; bool success = false; std::string::const_iterator from = raw.begin(); std::string::const_iterator to = raw.end(); success = phrase_parse( from, to , (varString % ',') , space , variableDescriptions ); if(!success || from != to) { std::string rest(from, to); std::cout << "Parsing failed. Unparsed fragement: " << rest << std::endl; } else { std::vector >::iterator it; for(it=variableDescriptions.begin(); it!=variableDescriptions.end(); ++it) { std::cout << boost::get<0>(*it) << ": " << boost::get<1>(*it) << std::endl; } } }