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