gpt4 book ai didi

带有匹配表达式的 PostgreSQL regexp_replace

转载 作者:行者123 更新时间:2023-11-29 11:32:22 26 4
gpt4 key购买 nike

我正在使用 PostgreSQL regexp_replace 函数来转义字符串中的方括号、圆括号和反斜杠,这样我就可以将该字符串用作正则表达式模式本身(还有对该字符串进行的其他操作在使用它之前,但它们超出了这个问题的范围。这个想法是替换:

[\[
]\]
(\(
)\)
\\\

Postgres documentation page on regular expressions陈述如下:

The replacement string can contain \n, where n is 1 through 9, to indicate that the source substring matching the n'th parenthesized subexpression of the pattern should be inserted, and it can contain \& to indicate that the substring matching the entire pattern should be inserted. Write \ if you need to put a literal backslash in the replacement text.

然而 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.]。也就是说,转义适用于标准反斜杠以外的字符。

此时我不知道如何进行。我该怎么做才能真正给我想要的替代品?

最佳答案

好的,找到答案了。显然,我需要在替换中对反斜杠进行两次转义。此外,我需要在旧版本的 postgres(在我的例子中是 8.3)的搜索模式中添加 E 前缀和双转义反斜杠。最终代码如下所示:

regexp_replace('abc [def]', E'([\\[\\]\\(\\)\\\\\?\\|_%])', E'\\\\\\1', 'g')

是的,它看起来很糟糕,但它确实有效:)

关于带有匹配表达式的 PostgreSQL regexp_replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com