我正在使用 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.]
. 也就是说,转义适用于标准反斜杠以外的字符。
在这一点上,我不知道如何进行。我该怎么做才能真正给我想要的替代品?