如何在上面的C++11中将函数作为regex_replace()的第三个参数?

问题描述 投票:0回答:1

我本来是想替换一个异常的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

请引导我实现目标,提前致谢!

c++ regex c++11 regex-replace
1个回答
0
投票

没有任何版本的

std::regex_replace
采用函数或其他可调用函数作为格式参数。请参阅此处:https://en.cppreference.com/w/cpp/regex/regex_replace

在每个版本中,参数都是

std::string
const CharT*
类型,并注明:

fmt - 正则表达式替换格式字符串,确切的语法取决于 标志值

然后您可以单击flags type的链接,您可以在其中找到ECMAScript语法文档的链接(这是默认语法)。

© www.soinside.com 2019 - 2024. All rights reserved.