我正在使用 PostgreSQLregexp_replace
函数来转义字符串中的方括号、括号和反斜杠,以便我可以将该字符串用作正则表达式模式本身(在使用该字符串之前还对该字符串进行了其他操作,但它们超出了本问题的范围。想法是替换:
[
with \[
]
with \]
(
with \(
)
with \)
\
with \\
关于正则表达式的 Postgres 文档页面 http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP陈述如下:
替换字符串可以包含 \n,其中 n 是 1 到 9,以
表示与第n个括号匹配的源子串
应插入模式的子表达式,并且它可以包含 \&
指示匹配整个模式的子字符串应该是
插入。如果需要在文本中添加反斜杠,请写入 \
替换文本。
However regexp_replace('abc [def]', '([\[\]\(\)\\])', E'\\\1', 'g');
产生abc \ def\
.
在同一页面的下方,给出了一个示例,该示例使用\\1
符号 - 所以我尝试了。
Yet, regexp_replace('abc [def]', '([\[\]\(\)\\])', E'\\\\1', 'g');
产生abc \1def\1
.
我猜这是预料之中的,但是regexp_replace('abc [def]', '([\[\]\(\)\\])', E'.\\1', 'g');
产生abc .[def.]
。也就是说,转义适用于标准反斜杠以外的字符。
此时我不知道如何继续。我该怎么做才能真正得到我想要的替代品?