首先让我说,我已经在 SO 上彻底研究了这个问题的所有其他解决方案,尽管它们非常相似,但没有一个能完全解决我的问题。
我需要使用 boost 正则表达式来提取不包括引号(对于引用的)的所有标记。
我认为我需要使用的正则表达式是:
sregex pattern = sregex::compile("\"(?P<token>[^\"]*)\"|(?P<token>\\S+)");
但是我得到一个错误:
named mark already exists
为 C# 发布的解决方案似乎适用于重复的命名标记,因为它是与另一个标记的 OR 表达式。
最佳答案
我在这里回答了一个非常相似的问题:
How to make my split work only on one real line and be capable to skip quoted parts of string?
示例代码
- 使用 Boost Spirit
- 支持带引号的字符串、部分带引号的字段、用户定义的定界符、转义引号
- 一般支持许多(不同的)输出容器
- 支持 Range 概念模型作为输入(包括 char[],例如)
使用相对广泛的编译器版本和 Boost 版本进行测试。
关于c++ - 标记一个字符串,不包括引号内的定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871721/