C++按大括号分割字符串:正则代码运行失败求助
解决C++正则分割JSON风格字符串的问题
嘿,我看了你写的代码,问题主要出在正则表达式的写法和未定义变量上,咱们一步步来修正:
原代码的问题点
- 正则表达式多了不必要的分隔符:C++标准库的
regex不需要像JavaScript那样用/包裹正则模式,你写的"/{([^}]*)}/"里的前后/会被当成正则的一部分去匹配,自然找不到结果。 - 未定义变量
i:循环里的(*iter)[i]中的i从来没声明过,编译都会报错。
修正后的代码(输出期望的数组格式)
给你一个能直接运行的版本,刚好输出你想要的结果:
#include <iostream> #include <string> #include <regex> using namespace std; int main() { // 替换成你实际要处理的目标字符串 string s1("{'day': 1, 'count': 100}, {'day': 2, 'count': 100}"); // 用原始字符串字面量避免转义麻烦,匹配{...}格式的完整对象 regex e(R"(\{[^}]*\})"); sregex_iterator iter(s1.begin(), s1.end(), e); sregex_iterator end; // 输出你期望的数组格式 cout << "[ "; bool isFirst = true; while (iter != end) { if (!isFirst) { cout << ", "; } // 输出完整的{...}对象 cout << (*iter)[0]; isFirst = false; ++iter; } cout << " ]" << endl; return 0; }
关键修改说明
- 去掉了正则前后的
/,改用C++的原始字符串字面量R"()",这样写\{就能直接匹配字符{,不用额外转义。 - 修复了未定义变量的问题,用
(*iter)[0]获取整个匹配的{...}内容;如果只需要{}内部的文本,换成(*iter)[1]就行(不过你需要的是完整对象,所以用[0])。 - 添加了简单的逻辑,让输出刚好是你想要的带
[ ]包裹的数组格式。
运行结果
这段代码运行后会直接输出:
[ {'day': 1, 'count': 100}, {'day': 2, 'count': 100} ]
内容的提问来源于stack exchange,提问作者indev
相关产品推荐
相关产品推荐

