如何使用regexp_matches获取多个mached关键字

时间:2015-03-18 04:45:58

标签: regex postgresql

如何在给定字符串中获取多个匹配的关键字。 请找到以下查询。

 SELECT regexp_matches(UPPER('bakerybaking'),'BAKERY|BAKING');
  

输出:" {BAKERY}"

给定字符串的上述场景与两个关键字匹配。 当我执行上述查询时,只获取一个关键字。 如何获得其他匹配关键字。

3 个答案:

答案 0 :(得分:2)

g 是在 regex 中使用的全局搜索标记。我过去常常使用匹配的字符串

select regexp_matches(UPPER('bakerybaking'),'BAKERY|BAKING','g')



regexp_matches 
text[]
-------------- 
{BAKERY}       
{BAKING}  

将结果作为单行获取:

SELECT ARRAY(select array_to_string(regexp_matches(UPPER('bakerybaking'),'BAKERY|BAKING','g'),''));

array 
text[]          
--------------- 
{BAKERY,BAKING} 

使用unnest - 转换返回表格的数组

select unnest(regexp_matches(UPPER('bakerybaking'),'BAKERY|BAKING','g'))

unnest 
text
------ 
BAKERY 
BAKING 

答案 1 :(得分:0)

根据:http://www.postgresql.org/docs/9.5/static/functions-string.html

SELECT regexp_matches(UPPER('bakerybaking'),'(BAKERY)(BAKING)');

Otput :)

regexp_matches ----------------- {BAKERY,BAKING}(1行)

答案 2 :(得分:0)

哦,人类。请谢谢我。

--https://stackoverflow.com/questions/52178844/get-second-match-from-regexp-matches-results
--https://stackoverflow.com/questions/24274394/postgresql-8-2-how-to-get-a-string-representation-of-any-array
CREATE OR REPLACE FUNCTION aaa(anyarray,Integer, text)
RETURNS SETOF text
LANGUAGE plpgsql
AS $function$
DECLARE s $1%type;
BEGIN
FOREACH s SLICE 1 IN ARRAY $1[$2:$2] LOOP
RETURN NEXT array_to_string(s,$3);
END LOOP;
RETURN;
END;
$function$;

--SELECT aaa((ARRAY(SELECT unnest(regexp_matches('=If(If(E_Reports_@ >=1, DMT(E_Date_R1_@, DateShift),0)', '(\w+_@)|([0-9]+)','g'))::TEXT)),1,',')
--select (array[1,2,3,4,5,6])[2:5];
SELECT aaa(array_remove(Array(SELECT unnest(regexp_matches('=If(If(E_Reports_@ >=1, DMT(E_Date_R1_@, DateShift),0)', '(\w+_@)|([0-9]+)','g'))::TEXT), Null),3,',')