首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析boost-spirit中的嵌套数据

分析boost-spirit中的嵌套数据
EN

Stack Overflow用户
提问于 2011-06-03 23:04:48
回答 2查看 707关注 0票数 1

我需要解析一些文本树:

代码语言:javascript
复制
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的一部分,而不是单个字符

可以使用boost::spirit?标记此字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-04 03:29:56

列表解析器是你的朋友:

代码语言:javascript
复制
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主干)。

票数 3
EN

Stack Overflow用户

发布于 2011-06-03 23:15:34

是的,您可以使用spirit来完成此格式,但在我看来,它远远超出了您的需要。

我会直接使用std字符串函数编写tokenise代码。交替增强:regex应该可以很容易地为您做这件事。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6228847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档