2014-02-26 58 views
0

我想寫一個Postgres正則表達式來找到其中一列只有數字和超過5Postgres的正則表達式許多元素

EG的字符串長度記錄:列hello'0 1 1 2 1''12345'

或者爲了保持簡單我想要一個正則表達式來識別包含5個或更多數字的行。

如何編寫該正則表達式?

+0

您列總是隻包含數字,可能還有空格? – Houari

+0

而「數字」你的意思是「數字」,對吧?而且你想要列中只有數字和空格字符的行,對嗎? –

+0

另外:'超過5的長度'或'5個或更多數字',它會是?假設「5或更多」... –

回答

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 ..的regexp簡寫[位]的字符類
[\d ] ..數字或空間
^ ..刺痛的開始
$ ..結束的條紋ng

translate()是替換單個字符的最快方法,只是在此示例中爲空格。

如果你正在尋找一個單個正則表達式(可能比上述更慢)作者:

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

說明:
* ..零或多個空格
(\d *) ..的原子選自由之後是零個或多個空格字符
{5,} ..上一個原子5次或更多次