我需要解析一些文本树:

std::string data = "<delimiter>field1a fieald1b fieald1c<delimiter1>subfield11<delimiter1>subfieald12<delimiter1>subfieald13 ... <delimiter>field2a fieald2b fieald2c<delimiter1>subfield21<delimiter1>subfieald22<delimiter1>subfieald23 ..."

其中<delimiter>,<delimiter1>是std::string的一部分,而不是单个char

可以用boost::spirit标记该字符串吗?

最佳答案

列表解析器是您的 friend :

namespace qi = boost::spirit::qi;

// tokenize on '<delimiter1>' and return the vector
rule<std::string::iterator, qi::space_type, std::vector<std::string>()> fields =
    *(char_ - "<delimiter1>") % "<delimiter1>";

std::string data("<delimiter>field1a fieald1b ...");
std::vector<std::vector<std::string> > fields_data;

// tokenize of '<delimiter>' and return a vector of vectors
qi::phrase_parse(data.begin(), data.end(),
    fields % "<delimiter>", qi::space, fields_data);

为此,您可能需要使用Spirit的最新版本(Boost V1.47或SVN干线)。

关于c++ - 在boost-spirit中解析嵌套数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6228847/

10-09 04:52