如何用最后匹配的字符和常量替换字符串中最后匹配的字符

时间:2020-08-06 15:05:23

标签: c++ regex c++17

我有一个像这样的字符串

string basestring= "A\B+C+E\FG+\K987+54h\";

我必须用相同的特殊字符和替换所有出现的特殊字符。

输出应为:

"A\\B\+C\+E\\FG\+\\K987\+54h\\"

当前,我正在使用以下代码来获取结果。

regex Reg("[^A-Z0-9]", regex_constants::icase);
string help = regex_replace("A\B+C+E\FG+\K987+54h\", Reg, "\\");

这将用\替换所有特殊字符,如何获取最后出现的特殊字符?

2 个答案:

答案 0 :(得分:1)

使用

std::regex Reg("[^A-Z0-9]", std::regex_constants::icase);
std::string help = std::regex_replace(R"(A\B+C+E\FG+\K987+54h\)", Reg, R"(\$&)");

替换是一个反斜杠,后跟匹配值(对整个匹配的反引用是$&)。

答案 1 :(得分:0)

进行此替换时:

regex_replace("A\B+C+E\FG+\K987+54h\", Reg, "\\");

您正将\\替换为您匹配的每种模式。

要获得所需的输出,您需要在匹配的模式中替换转义字符,如下所示:

std::regex_replace(R"(A\B+C+E\FG+\K987+54h\)", Reg, "\\$0");
                       // insert \\ before the match ^^^^ 

还请注意,输入字符串需要转义特殊字符,或写为原始字符串文字。

这里是demo

相关问题