我有以下查询:
SELECT
field
FROM
myTable
WHERE
field ~ '\\Qprefix[\\E.+'
它不会找到像 prefix[foo]
这样的值。
如何替换 \Q..\E
?
最佳答案
这种带有 \Q..\E
不带引号的子字符串的正则表达式形式仅被 PCRE 支持,这在 PostgreSQL 中不可用。
如果您的程序通常必须处理这种语法,PCRE 支持可以作为扩展安装,如下所示:https://github.com/petere/pgpcre
另一方面,如果只有一个正则表达式应该起作用,首先
请注意,'\\Qprefix[\\E.+'
中的双反斜杠实际上意味着 PostgreSQL 9.1 及更高版本中的两个反斜杠,除非 standard_conforming_strings
明确切换为 关闭
。
为了对此设置不敏感,旧语法的文字应以 E
为前缀。这在 String Constants with C-style Escapes 中有描述。在文档中。
要简单地将 prefix[foo]
与具有现代语法的 PostgreSQL 风格的正则表达式匹配,这是有效的:
test=> show standard_conforming_strings ;
standard_conforming_strings
-----------------------------
on
(1 row)
test=> select 'prefix[foo]' ~ 'prefix\[.+';
?column?
----------
t
(1 row)
关于regex - postgresql 中 regexp\Q...\E 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313964/