我本来是想替换一个异常的json字符串中的一些字符,让其正常,所以我用正则表达式来匹配它并在行中替换它,匹配到的字符需要进行转换,那么有什么方法可以使“匹配” ”和“转换”在一个功能中?代码如下:
std::string replace(std::smatch match) {
std::string str = match.str();
return "[" + str + "]";
}
int main(){
std::string str = R"({"key":"v\"a\"lue","key2":"v"a"lue2"})";
std::istringstream iss(str);
stringstream output;
std::string token;
while (std::getline(iss, token, ',')) {
std::cout << token << std::endl;
std::regex pattern("\\:\\s*\"(.*)\"");
std::string tokenAfter = std::regex_replace(token, pattern, replace);
output << tokenAfter;
}
cout << output.str();
return 0;
}
发生错误:
error: no matching function for call to 'regex_replace(std::string&, std::__cxx11::regex&, <unresolved overloaded function type>)'x86-64 gcc 12.2 #1
请引导我实现目标,提前致谢!
没有任何版本的
std::regex_replace
采用函数或其他可调用函数作为格式参数。请参阅此处:https://en.cppreference.com/w/cpp/regex/regex_replace
在每个版本中,参数都是
std::string
或 const CharT*
类型,并注明:
fmt - 正则表达式替换格式字符串,确切的语法取决于 标志值
然后您可以单击flags type的链接,您可以在其中找到ECMAScript语法文档的链接(这是默认语法)。