我有以下查询:
SELECT
field
FROM
myTable
WHERE
field ~ '\\Qprefix[\\E.+'
它不会找到类似的值prefix[foo]
.
我该如何更换\Q..\E
?
这种形式的正则表达式带有\Q..\E
仅支持不带引号的子字符串PCRE http://www.pcre.org/,这在 PostgreSQL 中本身不可用。
如果您的程序通常必须处理此语法,则可以将 PCRE 支持作为扩展安装,如下所示:https://github.com/petere/pgpcre https://github.com/petere/pgpcre
另一方面,如果只有一个正则表达式应该工作,首先
请注意,双反斜杠'\\Qprefix[\\E.+'
对于 PostgreSQL 9.1 及更高版本,字面意思是两个反斜杠,除非standard_conforming_strings
显式切换为OFF
。
为了对此设置不敏感,具有旧语法的文字应以前缀为E
。这在具有 C 风格转义的字符串常量 http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE在文档中。
为了简单地匹配prefix[foo]
使用带有现代语法的 PostgreSQL 风格的正则表达式,这是有效的:
test=> show standard_conforming_strings ;
standard_conforming_strings
-----------------------------
on
(1 row)
test=> select 'prefix[foo]' ~ 'prefix\[.+';
?column?
----------
t
(1 row)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)