【发布时间】:2019-11-01 18:51:02
【问题描述】:
全部。
我正在查询 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)"。执行后,查询返回:
P.id P.processo_id PR.num_formated
781291700 502707245 20190001418-14.1998.8.05.0103
我的问题是:为什么 Postgres “忽略”第一个 \d?它解释与“传统/常规/正统/任何”方式不同的正则表达式的形式是否有任何特殊性,因为相同的正则表达式在我系统的另一部分完美地工作,但使用 ruby 代码?
提前致谢
沃利德
【问题讨论】:
-
预期输出是多少?结果似乎与您给出的正则表达式匹配。
-
您应该以不需要我们访问您的计算机来测试它的方式编写您的示例。
select '20190001418-14.1998.8.05.0103' ~ '\d{4}[\.\-\\]\d{2}\.\d{4}\.\d{1}\.\d{2}\.\d{4}' ; -
这个正则表达式在 ruby 中的行为方式与在 postgresql 中的行为方式相同。我得到了
ruby -le 'print "20190001418-14.1998.8.05.0103" =~ /\d{4}[\.\-\\]\d{2}\.\d{4}\.\d{1}\.\d{2}\.\d{4}/'的匹配项
标签: regex postgresql sequence numeric