我想解析像“start abc end”这样的输入来提取“abc”。
这是我的测试代码:
#include <boost/spirit/include/qi.hpp>
#include <ostream>
namespace qi = boost::spirit::qi;
int main(int argc, char* argv[])
{
typedef std::string::const_iterator iterator;
qi::rule<iterator, std::string(), qi::space_type> rule =
"start" >>
qi::lexeme[+qi::char_] >>
"end";
std::string input("start abc end");
auto iter = input.begin();
std::string result;
qi::phrase_parse(iter, input.end(), rule, qi::space, result);
std::cout << "Result: " << result << std::endl;
}
输出为“Result:abc end”。
答案 0 :(得分:3)
问题是,您希望解析器停留在空格或关键字“end”。但是你的解析器基本上接受“start”关键字之后的任何字符。
+char_
上面的解析器意味着:任何长于1的字符序列(包括空格)。
不知何故,你必须告诉你的解析器停在空格或“结束”关键字。例如,解析器将接受字符,直到“结束”关键字
+(char_ - lit("end"))
我建议您查看精神文档中的解析器列表。 http://www.boost.org/doc/libs/1_55_0/libs/spirit/doc/html/spirit/qi/quick_reference/qi_parsers.html