Dav*_*vis 4 regex arrays postgresql plpgsql set-returning-functions
这段代码:
select
x::text
from
regexp_matches( 'i1 into o2, and g1 into o17', '[gio][0-9]{1,}', 'g' ) as x;
Run Code Online (Sandbox Code Playgroud)
返回这些结果:
{i1}
{o2}
{g1}
{o17}
Run Code Online (Sandbox Code Playgroud)
而不是以下结果:
i1
o2
g1
o17
Run Code Online (Sandbox Code Playgroud)
使用PostgreSQL 9.x删除大括号的最有效方法是什么?
您的regexp_matches()模式只能在每个模式评估中生成一个元素,因此所有生成的行仅限于一个数组元素.表达式简化为:
SELECT x[1]
FROM regexp_matches('i1 into o2, and g1 into o17', '[gio][0-9]{1,}', 'g') AS x;
Run Code Online (Sandbox Code Playgroud)
SELECT unnest(x) -- also works for cases with multiple elements per result row
SELECT trim(x::text, '{}') -- corner cases with results containing `{}`
SELECT rtrim(ltrim(x::text, '{'), '}') AS x1 -- fewer corner cases
Run Code Online (Sandbox Code Playgroud)
如果模式每个输入值可以匹配或不匹配多次,也可以删除可选参数'g'.
如果函数总是返回一行,请考虑regexp_match()Postgres 10引入的略有不同的变体.
在Postgres的10或更高版本它也谨慎地建议设置恢复功能(SRF)regexp_matches()的SELECT直接列表(像里克提供),因为在多个战略成果框架的行为SELECT名单终于被消毒: