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}$'
所有。
我正在查询 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}$'