在阅读文档时,我读到了
对于用逗号分隔的双字符串,我们可以像这样(我理解)
double_ >> * (',' >> double_)
或double_ %
但是以下表达式意味着什么。它应该将逗号分隔的字符串拆分为一个向量,它可以工作。如果有人能够澄清它,我将不胜感激。我对-
运算符感到困惑我认为它是一个差异运算符,但我无法弄清楚它在这里的作用
*(qi::char_ - ',') % ','
答案 0 :(得分: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"]
}
答案 1 :(得分:0)
qi::char_ - ','
匹配除,
之外的所有字符,以防止内部表达式过于贪婪。
答案 2 :(得分:0)
你真的需要阅读EBNF标准才能理解Boost.Spirit。