点我有这些字符串:捕捉与Postgres的正则表达式
3 FD160497. 2016 abcd
3 FD160497 2016 abcd
我想捕捉“FD”,数字,然后点(如果存在)。
我尝试这样做:
SELECT
sqn[1] AS letters,
sqn[2] AS digits,
sqn[3] AS dot
FROM (
SELECT
regexp_matches(string, '.*?(FD)([0-9]{6})(\.)?.*') as sqn
FROM
mytable
) t;
(PostgreSQL的9.5.3)
“点” 列是在两种情况下NULL
,我真的不知道为什么。 它在regex101上效果很好。
尝试'regexp_matches(字符串,” *(FD)( [0-9] {6})(\。)?。*')as sqn'或甚至在'F'之前添加一个空格。 –
尝试使用贪婪的旗帜。如果贪婪选项未设置(=懒惰),则该点可能会匹配最少的字符。该点将在最后与'。*'匹配。或者,您可以在最后一个问号后添加一个空格。 – Plasm