给定一个字符串我想提取所有与正则表达式(例如电子邮件)匹配的表达式作为数组。这是我的实际代码,使用 PostgreSQL 9.4 :
select regexp_matches('user1@gml.com lorem ipsum user2@yho.com',
'([a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4})',
'g')
输出是2条记录:
regexp_matches
-----------------
{user1@gml.com}
{user2@yho.com}
(2 rows)
我想要的是将所有匹配项放在一个数组中,例如:
regexp_matches
-----------------
{user1@gml.com, user2@yho.com}
(1 row)
如何实现?
答案 0 :(得分:4)
您可以unnest
每个结果数组,然后array_agg
将它们组合在一起。
这有点难看:
select array_agg(x)
from (
select unnest(
regexp_matches('user1@gml.com lorem ipsum user2@yho.com',
'([a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4})',
'g')
)
) a(x);