【问题标题】:Postgres regular expression for a number of elements多个元素的 Postgres 正则表达式
【发布时间】:2014-02-27 02:35:42
【问题描述】:

我正在尝试编写一个 Postgres 正则表达式来查找列仅包含数字且字符串长度大于 5 的记录。

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

或者为了简单起见,我想要一个正则表达式来识别其中包含 5 个或更多数字的行。

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

【问题讨论】:

  • 你的列总是只包含数字,也许还有空格?
  • “数字”是指“数字”,对吧?而且您想要列中只有数字和空格字符的行,对吗?
  • 还有:length of more than 55 or more numbers,会是哪个?假设“5 个或更多”...

标签: regex postgresql


【解决方案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 .. [digit] 字符类的正则表达式简写
[\d ] .. 数字或空格
^ .. 字符串开头
$ .. 字符串结尾

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

如果您正在寻找单个正则表达式(可能比上面的要慢):

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2011-11-03
    • 2015-04-14
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多