postgresql 中的 regexp \Q...\E 等价于什么?

2024-03-11

我有以下查询:

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(使用前将#替换为@)

postgresql 中的 regexp \Q...\E 等价于什么? 的相关文章

随机推荐