使用boost :: spirit来匹配单词

时间:2016-10-10 00:16:30

标签: c++ parsing boost boost-spirit

我想创建一个解析器,它将匹配字符串中的两个字母数字字,例如:

message1 message2

然后将其保存为std :: string类型的两个变量。

我读过this previous answer这似乎适用于无休止的重复,它使用以下解析器:

+qi::alnum % +qi::space

然而,当我尝试这样做时:

 bool const result = qi::phrase_parse(
            input.begin(), input.end(),
            +qi::alnum >> +qi::alnum,
            +qi::space,
            words
    );

words向量包含不同字符串中的每个字母:

't'
'h'
'i'
's'
'i'
's'

这非常违反直觉,我不确定为什么会发生这种情况。有人可以解释一下吗?

另外,我可以填充两个预定义的字符串而不是std :: vector吗?

最后注意事项:我想避免使用使用语句,因为我希望明确定义每个命名空间,以帮助我了解Spirit的工作原理。

1 个答案:

答案 0 :(得分:3)

是的,但船长在你采取行动之前会忽略空白。

使用lexeme来控制船长:

bool const result = qi::phrase_parse(
        input.begin(), input.end(),
        qi::lexeme [+qi::alnum] >> qi::lexeme [+qi::alnum],
        qi::space,
        words
);

请注意,船长应为qi::space而不是+qi::space

另见Boost spirit skipper issues