我想用"b"替换括号内"a"的"全部"出现.
我有:
std::string s = "a(aaa)a";
std::regex e("(\\(.*?)(a)(.*\\))");
s = std::regex_replace(s, e, "$1b$3");
std::cout << s << std::endl;
Run Code Online (Sandbox Code Playgroud)
它输出:
a(baa)a
Run Code Online (Sandbox Code Playgroud)
但我想要:
a(bbb)a
Run Code Online (Sandbox Code Playgroud)
似乎唯一正确的解决方案是进行两次正则表达式搜索。一种方法是提取括号子字符串,然后对该字符串执行第二个正则表达式。
std::string in = "a(a a)a( a ) a";
std::regex re("\\(.*?\\)");
std::smatch m;
std::string out;
while (std::regex_search(in, m, re))
{
out += m.prefix();
std::regex re("a");
out += std::regex_replace(m[0].str(), re, "b");
in = m.suffix();
}
out += in;
std::cout << out << std::endl;
Run Code Online (Sandbox Code Playgroud)
输入:
a(a a)a( a ) a"
Run Code Online (Sandbox Code Playgroud)
输出:
a(b b)a( b ) a
Run Code Online (Sandbox Code Playgroud)