You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++按大括号分割字符串:正则代码运行失败求助

解决C++正则分割JSON风格字符串的问题

嘿,我看了你写的代码,问题主要出在正则表达式的写法和未定义变量上,咱们一步步来修正:

原代码的问题点

  1. 正则表达式多了不必要的分隔符:C++标准库的regex不需要像JavaScript那样用/包裹正则模式,你写的"/{([^}]*)}/"里的前后/会被当成正则的一部分去匹配,自然找不到结果。
  2. 未定义变量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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:02:32