2013-10-28 64 views
3

我想從諸如123A America,234B Britania等名稱中提取兩個整數和字符。 我只想要數字和附加的字母(即123A)。 我使用regexp_matches(名稱, '(\ d +)(\ d)')和它的結果爲:postgresql:如何連接兩個regexp_matches()

{123,A}, {456,B}

我想用級聯,得到一個數組的第一元件和第二元件使用兩種不同的功能 (regexp_matches(name, '(\d+)(\D)')) [1] || (regexp_matches(name, '(\d+)(\D)')) [2]

但它產生一個錯誤: ERROR: functions and operators can take at most one set argument

我怎樣才能得到這兩個元素作爲一個字符串?

+0

一般來說,錯誤信息是指什麼?即爲什麼,什麼似乎是一個簡單的值連接,導致錯誤:函數和運算符最多可以採用一個集合參數? – pretzels1337

回答

1

您不必將您正在搜索的兩個項目作爲不同的集合,只需將它們作爲一個集合。刪除在\d+\D之間的)(,那將返回一個包含您要查找的整個字符串的集合。

結果在這 - regexp_matches('123A America, 234B Britania', '(\d+\D)')

這隻能找到第一個匹配。要獲取所有匹配子,用g標誌 - regexp_matches('123A America, 234B Britania', '(\d+\D)', 'g')

0

很好的答案被@Scott小號但是如果你不能達到你所需要的一個捕獲組內的解決辦法是寫一個函數,賦值正則表達式結果一個變量,然後使用它。

CREATE OR REPLACE FUNCTION do_something(_input character varying) 
    RETURNS character varying AS 
$BODY$ 
DECLARE 
    matches text[]; 
BEGIN 
    matches := regexp_matches(_input, '^([0-9]{1,}_[^_]{1,})_[a-z]{1,}(.*)$','i'); 
    return substring(matches[1], 0, 24)||matches[2]; 
END 
$BODY$ 
    LANGUAGE plpgsql;