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
相关产品推荐
相关产品推荐

