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

C++正则匹配字符串中匹配项位置获取问题求助

获取字符串中正则匹配项位置的算法问题

我在实现获取字符串中正则匹配项位置的算法时遇到了问题,代码如下:

std::vector<int> mval;

int closed_val = 0;
int open_val = 0;
std::string da_line = "} } }";
std::smatch m;
std::regex_search(da_line, m, std::regex("([\}]+)"));
for (auto mv : m) std::cout << mv << std::endl;
std::cout << m.size() << std::endl;
closed_val = da_line.find(m[0]);
mval.push_back(closed_val);
try {
    if (m.size() >= 1) {
        std::string db_line;
        for (int j = 1; j < m.size(); j++) {
            std::cout << da_line << std::endl;
            db_line = da_line.substr(da_line.find(m[j]) + 1, da_line.size() - 1);
            std::cout << db_line << std::endl;
            int f = db_line.find(m[j]);
            if (f == -1 || f > db_line.size() - 1)
                continue;
                std::cout << f << std::endl;
            open_val = closed_val + f + 1;
            for (auto mv : m) std::cout << mv << std::endl;
            std::cout << db_line.find(m[j + 1]) << std::endl;
            mval.push_back(open_val);
            closed_val = open_val;
            da_line = db_line;
        }
    }
}
catch (std::exception& error) {
    std::cerr << "error : " << error.what() << std::endl;
}

for (auto mv : mval) std::cout << mv << ":";
std::cout << std::endl;

当前输出:

}
}
2
} } }
 } }
1
}
}
0
0:2:

存在两个问题:

  • 字符串中有3个},但正则返回了2个匹配;
  • 预期结果为0:2:4,但实际输出为0:2。

内容的提问来源于stack exchange,提问作者SagunKho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:15:08