我需要用参数A和B解析字符串。参数的顺序没有定义。即字符串可以作为下一种格式之一出现
A="value1",B="value2"B="value1",A="value2"你可以在下面看到我的代码的一部分。但在该代码中,我只能解析A="value1",B="value2“变体。我可以修改这段代码来同时解析第一个和第二个变体吗?可以,我可以添加替代条件("|")。但是如果我需要解析新的C和D参数怎么办?
using Iterator = std::string::const_iterator;
qi::rule<Iterator, std::string()> quotedStringParser;
quotedStringParser %= ('"' >> +(qi::char_ - '"') >> '"');
std::string A;
std::string B;
bool isImport = false;
if (!qi::parse(begin(line), end(line),
("A=" >> quotedStringParser[px::ref(A) = qi::_1] >> ',' >> "B=" >> quotedStringParser[px::ref(B) = qi::_1]) >> qi::eoi
)) {
return false;
}发布于 2021-07-01 04:27:03
由于您希望能够将其扩展到任意数量的参数,因此更容易将其视为以逗号分隔的备选方案列表,每个备选方案都具有一个语义操作。这样,您就不必处理所有可能的排列。
(("A=" >> quotedStringParser[px::ref(A) = qi::_1]) |
("B=" >> quotedStringParser[px::ref(B) = qi::_1]) |
("C=" >> quotedStringParser[px::ref(C) = qi::_1]) |
("D=" >> quotedStringParser[px::ref(D) = qi::_1]) ) % "," >> qi::eoi然而,这是一个非常容错的解析器。
如果您想保持相同级别的严格程度,那么您可以相对轻松地验证后期解析。
https://stackoverflow.com/questions/68201075
复制相似问题