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

问题

这段代码

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?

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...