c++ - 使用 RE2::GlobalReplace 转义字符串

标签 c++ re2

由于原因,我在项目中只使用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/

相关文章:

c++ - lambda 作为模板参数访问 'this' 指针?

c++ - 获取焦点应用程序的名称(在 Mac 上)

c++ - 使用静态初始化来注册类

c++ - 交换 multimap<int, int> 中的每对值

java - 是否存在类似 RE2 的 Java 正则表达式库?

python - 是否可以从 Python 中使用 re2?

正则表达式(re2 googlesheets)多行单元格中的多个值

没有宏的 C++ 配置方法

Regexp_Extract 分隔字符串中的第 n 个位置

字符串 RE2 谷歌表格上的正则表达式否定查询