0

在浏览文档时,我读到了

对于用逗号分隔的一串双打,我们可以这样(我理解)

double_ >> * (',' >> double_)或者double_ %

但是下面的表达式是什么意思。它应该将逗号分隔的字符串拆分为一个向量并且它可以工作。如果有人能澄清一下,我将不胜感激。我对-运营商感到困惑我相信它是一个差异运营商,但我无法弄清楚它在这里的作用

*(qi::char_ - ',') % ','

4

3 回答 3

5

*(char_ - ',')表示“匹配零个或多个字符,但 ','”,也可以这样写:*~char_(","). 另一方面,*char_仅表示“匹配零个或多个字符”。

要理解为什么需要排除,只需尝试使用和不使用它:

#include <string>
#include <boost/spirit/home/qi.hpp>
int main()
{
    using namespace boost::spirit::qi;
    std::vector<std::string> out1, out2;
    std::string s = "str1, str2, str3";
    bool b = parse(s.begin(), s.end(), *~char_(",") % ",", out1); // out1: ["str1", "str2", "str3"]
    b = parse(s.begin(), s.end(), *char_ % ",", out2); // out2: ["str1, str2, str3"]
}
于 2013-04-13T18:06:03.143 回答
0

你真的需要阅读EBNF标准来理解 Boost.Spirit。

于 2013-04-13T18:00:42.467 回答
0

qi::char_ - ','匹配所有字符,但,要防止内部表达式过于贪婪。

于 2013-04-13T17:21:16.040 回答