Postgres正则表达式为许多元素

时间:2014-02-26 18:11:15

标签: regex postgresql

我正在尝试编写Postgres正则表达式来查找列只有数字且字符串长度超过5的记录。

例如:列hello'0 1 1 2 1''12345'

或者为了保持简单,我想要一个能够识别其中包含5个或更多数字的行的常规快递。

我该如何编写正则表达式?

1 个答案:

答案 0 :(得分:1)

SELECT *
FROM   (
   VALUES 
    ('98765')
   ,('1 2 3 4 5')
   ,('143562465')
   ,(' 1 2 5  3 235')
   ,(' 1 2 5  3 235s')
   ,('y 1 2 5  3 235')
   ,('245no')
   ,('1234')
    ) sub(hello)
WHERE  hello ~ '^[\d ]+$'
AND    length(translate(hello, ' ','')) > 4

结果:

98765
1 2 3 4 5
143562465
 1 2 5  3 235

解释regular expression

\d ..正则表达式为[数字]字符类的速记
[\d ] ..数字或空格
^ ...开始刺痛 $ ..字符串结尾

translate()是替换单个字符的最快方法,在本例中只是空格。

如果您正在寻找单一正则表达式(可能比上述速度慢):

WHERE hello ~ '^ *(\d *){5,}$'

说明:
* ..零或多个空格
(\d *) ..由一个数字组成,后跟零个或多个空格字符的原子 {5,} ..前一个原子5次或更多次