Postgresql正则表达式匹配函数:regexp_matches

时间:2015-06-26 10:35:06

标签: sql arrays regex postgresql

给定一个字符串我想提取所有与正则表达式(例如电子邮件)匹配的表达式作为数组。这是我的实际代码,使用 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)

如何实现?

1 个答案:

答案 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);