使用RE2 :: GlobalReplace来转义字符串

时间:2019-03-22 09:15:36

标签: c++ re2

由于某些原因,我仅在项目中使用RE2进行正则表达式匹配。

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

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

我知道\0正在插入整个匹配组,但是一旦添加转义符号,我将收到意外结果:

  

〜/ Test \ 0 \ 0文件夹\ 0

代替

  

〜/ Test \ \(文件夹\)/

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

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

1 个答案:

答案 0 :(得分:1)

正则表达式组以1而不是0开头。除此之外,您使用"\\\\0"作为替换字符串。这是您最终的正则表达式中的文字"\0"。将"\\\\0"替换为"\\\\\\1"。这将得出"\\\1",它是文字\和第一个匹配组。

您可以使用此helpful site

设计和测试正则表达式以及它们生成的状态机。