Postgres 中的正则表达式

Regular expressions in Postgres

所有。

我正在查询 Postgres 9.3 数据库以查找字段中的特定模式:

SELECT
 P.id, P.processo_id, PR.num_formated
FROM
 publications P
INNER JOIN processos PR ON PR.id=P.processo_id
WHERE
 --The first numeric sequence must be exact 4 digits length, so the initial \d{4}
 PR.num_formated ~ '\d{4}[\.\-\]\d{2}\.\d{4}\.\d{1}\.\d{2}\.\d{4}'
AND
 P.id=781291700 --Just to force a specific record

其中 PR.num_formated 定义为 "character varying(255)"。执行后,查询 returns:

  P.id      P.processo_id        PR.num_formated
781291700     502707245    20190001418-14.1998.8.05.0103

我的问题是:为什么 Postgres "ignoring" 是第一个 \d?它解释与 "traditional/regular/orthodox/whatever" 方式不同的正则表达式的形式是否有任何特殊性,因为相同的正则表达式在我系统的另一部分完美运行,但使用 ruby 代码?

提前致谢

瓦利德

前 7 个字符被忽略,因为查询发现该模式是字符串的一部分。如果要匹配整个字符串,请使用 ^$ constraints.

'^\d{4}[\.\-\]\d{2}\.\d{4}\.\d{1}\.\d{2}\.\d{4}$'