在浏览文档时,我读到了
对于用逗号分隔的一串双打,我们可以这样(我理解)
double_ >> * (',' >> double_)
或者double_ %
但是下面的表达式是什么意思。它应该将逗号分隔的字符串拆分为一个向量并且它可以工作。如果有人能澄清一下,我将不胜感激。我对-
运营商感到困惑我相信它是一个差异运营商,但我无法弄清楚它在这里的作用
*(qi::char_ - ',') % ','
在浏览文档时,我读到了
对于用逗号分隔的一串双打,我们可以这样(我理解)
double_ >> * (',' >> double_)
或者double_ %
但是下面的表达式是什么意思。它应该将逗号分隔的字符串拆分为一个向量并且它可以工作。如果有人能澄清一下,我将不胜感激。我对-
运营商感到困惑我相信它是一个差异运营商,但我无法弄清楚它在这里的作用
*(qi::char_ - ',') % ','
*(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"]
}
你真的需要阅读EBNF标准来理解 Boost.Spirit。
qi::char_ - ','
匹配所有字符,但,
要防止内部表达式过于贪婪。