由于某些原因,我仅在项目中使用RE2进行正则表达式匹配。
我正在尝试使用RE2库对特定字符进行转义。
std::string aInput = "~/Test (Folder)/";
RE2::GlobalReplace( &aInput, "(<|>|\\||\\:|\\(|\\)|&|;|\\s)", "\\\\0" );
我知道\0
正在插入整个匹配组,但是一旦添加转义符号,我将收到意外结果:
〜/ Test \ 0 \ 0文件夹\ 0
代替
〜/ Test \ \(文件夹\)/
如何使用RE2在每个匹配组之前插入\?
PS。 RE2 :: QuoteMeta()对我来说不是一个选项,因为它将转义我不需要转义的字符。
答案 0 :(得分:1)
正则表达式组以1而不是0开头。除此之外,您使用"\\\\0"
作为替换字符串。这是您最终的正则表达式中的文字"\0"
。将"\\\\0"
替换为"\\\\\\1"
。这将得出"\\\1"
,它是文字\和第一个匹配组。
您可以使用此helpful site
设计和测试正则表达式以及它们生成的状态机。