("one"|"two"|"three") 是一个-6ren">
gpt4 book ai didi

c++ - 如何在评论或引用时忽略分隔符

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:17 26 4
gpt4 key购买 nike

我编写了一个解析器来查找字符串连接表达式。我有一系列用括号括起来的字符串,主要来自函数调用。

例如,("one"+"two"+"three") -> ("one"|"two"|"three") 是一个简单的案例,我可以处理.

一个更困难的情况是(null, "one"+"two"+"three", null) -> (null, "one"|"two"|"three", null),但我可以用 boost::tokenizer 解析它。

(null, "one"+"two"+"three,four", 1/* 第三个参数可以是:1, 2, 3 */),在这么难的例子中我建议使用 boost::spirit 进行解析,但我需要帮助为其编写一些规则。

之后:

似乎 escaped_list_separator 来自 boost::tokenizer 是我需要的。但是我有一个问题:

   using namespace std;
using namespace boost;
string s = "Field 1,\"putting quotes around fields, allows commas\",Field 3";
tokenizer<escaped_list_separator<char> > tok(s,escaped_list_separator<char>("", ",", "\""));
for(tokenizer<escaped_list_separator<char> >::iterator beg=tok.begin(); beg!=tok.end();++beg){
cout <<"~~~"<< *beg << "\n";
}

为我删除了 "。可以像这样在输出中保留引号

Field 1
"putting quotes around fields, allows commas"
Field 3

最佳答案

基本上,您可以使用 operator- 进行字符集匹配:

   rule = '"' >> (char_ - '"') >> '"';

另请参阅 operator ~ 以反转字符集。

如果您也有兴趣在引号内转义引号,并且可能同时评论样式,我建议您在这里查看我的回答:

显示(部分)CSV 文件中引用的单元格,包括字符串中的转义引号。

其他感兴趣的项目:

关于c++ - 如何在评论或引用时忽略分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10732664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com