我正在使用 PostgreSQLregexp_replace函数来转义字符串中的方括号、括号和反斜杠,以便我可以将该字符串用作正则表达式模式本身(在使用它之前对该字符串也进行了其他操作,但它们超出了这个问题。想法是替换:
[有\[
]有\]
(有\(
)有\)
\有\\
关于正则表达式的 Postgres 文档页面说明如下:
替换字符串可以包含\n,其中n是1到9,表示应该插入匹配模式的第n个括号子表达式的源子字符串,它可以包含\&表示匹配整个模式的子字符串应该插入。如果您需要在替换文本中添加文字反斜杠,请编写 \。
然而regexp_replace('abc [def]', '([\[\]\(\)\\])', E'\\\1', 'g');产生abc \ def\.
在同一页面的下方,给出了一个使用\\1符号的示例 - 所以我尝试了。
然而,regexp_replace('abc [def]', '([\[\]\(\)\\])', E'\\\\1', 'g');产生abc \1def\1.
我猜这是意料之中的,但regexp_replace('abc [def]', '([\[\]\(\)\\])', E'.\\1', 'g');会产生abc .[def.]. 也就是说,转义适用于标准反斜杠以外的字符。
在这一点上,我不知道如何进行。我该怎么做才能真正给我想要的替代品?