gpt4 book ai didi

c++ - 使用 boost::spirit 匹配单词

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:19 24 4
gpt4 key购买 nike

我想创建一个解析器来精确匹配字符串中的两个字母数字单词,例如:

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 vector 包含不同字符串中的每个字母:

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

这是非常违反直觉的,我不确定为什么会这样。有人可以解释一下吗?

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

最后的说明:我想避免使用using 语句,因为我希望每个 namespace 都有明确的定义,以帮助我理解 Spirit 的工作原理。

最佳答案

是的,但是 skipper 会在您操作之前忽略空白。

使用lexeme控制 skipper :

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

注意 skipper 应该是 qi::space 而不是 +qi::space

另见 Boost spirit skipper issues

关于c++ - 使用 boost::spirit 匹配单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39949834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com