【发布时间】:2022-07-23 05:42:43
【问题描述】:
是否可以防止 boost 的 escaped_list_separator 在引用的令牌中使用引号?或者是否有任何其他现成的构造来存档此行为?
内引号无法转义,因为语法不支持,并且由第三方定义。
例子:
std::string input("ID=abcde;PARAM={this;{is};quoted}");
boost::escaped_list_separator<char> separator("", ";", "{}");
boost::tokenizer<boost::escaped_list_separator<char>> tokenizer(input, separator);
for(const auto &token : tokenizer)
{
std::cout << token << std::endl;
}
这会产生
ID=abcde
PARAM=this;is;quoted
但我需要
ID=abcde
PARAM=this;{is};quoted
【问题讨论】:
-
预处理输入字符串并将内部“引号”(似乎是大括号)转换为其他内容?然后将它们转换回来。
-
@PaulSanders 检测哪个字符是真正的引号字符,哪个不是并且应该替换将需要手动解析字符串,不是吗?无论如何,我可以手动标记字符串,这是我想避免的。还是我错过了什么?
-
我认为我所说的那种预处理比自己解析整个字符串要少 - 如果你可以相信字符串格式正确,你只需要走路尽管字符串保留了未闭合大括号的数量。
标签: c++ boost boost-tokenizer