由于原因,我在项目中只使用RE2进行正则表达式匹配。
我正在尝试使用 RE2 库转义特定字符。
std::string aInput = "~/Test (Folder)/";
RE2::GlobalReplace( &aInput, "(<|>|\\||\\:|\\(|\\)|&|;|\\s)", "\\\\0" );
我知道 \0
正在插入整个匹配组,但是一旦我添加了一个转义符号,我就会收到意想不到的结果:
~/Test\0\0Folder\0
代替
~/Test\ \(Folder\)/
如何使用 RE2 在每个匹配组前插入\?
附言。 RE2::QuoteMeta() 对我来说不是一个选项,因为它会转义我不需要转义的字符。
最佳答案
正则表达式组以 1 而不是 0 开头。此外,您还使用 "\\\\0"
作为替换字符串。这是最终正则表达式中的文字 "\0"
。将 “\\\\0”
替换为 “\\\\\\1”
。这将评估为 "\\\1"
,这是一个文字\和第一个匹配组。
您可以使用此 helpful site 设计和测试正则表达式及其生成的状态机
关于c++ - 使用 RE2::GlobalReplace 转义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55296303/