使用 RE2::GlobalReplace 转义字符串

Escape string using RE2::GlobalReplace

由于一些原因,我在项目中只使用RE2进行正则匹配

我正在尝试使用 RE2 库转义特定字符。

std::string aInput = "~/Test (Folder)/";
RE2::GlobalReplace( &aInput, "(<|>|\||\:|\(|\)|&|;|\s)", "\\0" );

我知道 [=12=] 正在插入整个匹配组,但是一旦我添加转义符号,我就会收到意外结果:

~/Test[=13=][=13=]Folder[=13=]

而不是

~/Test\ \(Folder\)/

如何使用 RE2 在每个匹配组前插入 \?

PS。 RE2::QuoteMeta() 对我来说不是一个选项,因为它会转义我不需要转义的字符。

正则表达式组以 1 而不是 0 开头。此外,您还使用 "\\0" 作为替换字符串。这是最终正则表达式中的文字 "[=11=]" 。将 "\\0" 替换为 "\\\1"。这将评估为 "\",这是一个文字 \ 和第一个匹配组。

您可以设计和测试正则表达式及其生成的状态机 helpful site