【发布时间】:2011-11-04 15:48:21
【问题描述】:
我正在尝试解析嘈杂的输入,理想情况下我将能够查看一个节是否符合规则,以及它是否确实获得了我需要的数据并丢弃其余数据。
我要的数据如下。
Event: Newstate
Channel: SIP/104-000001bb
ChannelState: 6
ChannelStateDesc: Up
我想确保 Event if 属于新状态。
我需要频道状态。其余的我不关心(只是还)所以我想忽略它,我希望它灵活并接受重要内容之间的任何旧废话,真的我不想说忽略这条线,而是忽略事件和我捕获值的通道状态结束之间的任何内容。
到目前为止,我得到了:
typedef boost::fusion::vector2<std::string, std::string> vect;
qi::rule<std::string::iterator, vect(), space> rule_ =
lit("Event: ") >> *char_("a-zA-Z") >>
qi::omit[ *char_ ] >>
"ChannelState: " >> *char_("0-9") >>
qi::omit[ *char_ ];
但这由于某种原因不起作用,当我这样做时,我总是得到错误的回报:
vect v;
bool r=qi::parse(it, str.end(), rule_, v);
编辑:Boost 版本 1.42 编译器 g++ 4.4 Spirit 0x2020
【问题讨论】:
标签: c++ boost boost-spirit boost-spirit-qi