加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – 从正则表达式结果中删除大括号

发布时间:2020-12-14 05:58:11 所属栏目:百科 来源:网络整理
导读:问题 这段代码: select x::textfrom regexp_matches( 'i1 into o2,and g1 into o17','[gio][0-9]{1,}','g' ) as x; 返回这些结果: {i1}{o2}{g1}{o17} 而不是以下结果: i1o2g1o17 相关链接 http://www.postgresql.org/docs/9.1/static/functions-matching.
问题

这段代码:

select
  x::text
from
  regexp_matches( 'i1 into o2,and g1 into o17','[gio][0-9]{1,}','g' ) as x;

返回这些结果:

{i1}
{o2}
{g1}
{o17}

而不是以下结果:

i1
o2
g1
o17

相关链接

> http://www.postgresql.org/docs/9.1/static/functions-matching.html

使用PostgreSQL 9.x删除大括号的最有效方法是什么?

解决方法

最优解

您的regexp_matches()模式每个模式评估只能生成一个元素,因此所有生成的行都只限于一个数组元素.表达式简化为:

SELECT x[1]
FROM   regexp_matches('i1 into o2,'g') AS x;

其他方案

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

如果模式每个输入值可以匹配或不匹配多次,也可以删除可选参数’g’.

如果函数总是返回一行,请考虑与Postgres 10一起引入的略有不同的变体regexp_match().

在Postgres 10或更高版本中,由于SELECT列表中的多个SRF的行为最终已被清理,因此在SELECT列表中直接建议设置返回函数(SRF)regexp_matches()(如What is the expected behaviour for multiple set-returning functions in select clause?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读