PostgreSQL:正则表达式用花括号替换第一级方括号

保罗·安杰尔诺

我在TEXT类型的PostgreSQL列中有数据,我需要对其进行一些字符替换。具体来说,我想用花括号代替方括号。要注意的是,如果您包括主包围支架,那么我只想替换不超过两层的支架。这些字符串可能很长,所以我认为正则表达式可能是可行的(regexp_replace函数),但对正则表达式而言我并不擅长。这是一个这样的值的示例:

[0,0,0,[12,2],0,0,[12,[1,2,3]],12,0,[12,2,[2]],12,0,12,0,0]

因此,我希望此字符串更改为:

{0,0,0,{12,2},0,0,{12,[1,2,3]},12,0,{12,2,[2]},12,0,12,0,0}

提前致谢!

强尼5

对于Regex而言,这将是一件痛苦的事情,因为在PostgreSQL风格中,可能没有递归可用

对于最大2级嵌套深度的检查,如果双替换为以下作品(不能测试它)

regexp_replace(
  regexp_replace('str', E'\\[(([^][]|\\[([^][]|\\[[^][]*\\])*\\])*)\\]', E'{\\1}', 'g')
, E'\\[(([^][]|\\[([^][]|\\[[^][]*\\])*\\])*)\\]', E'{\\1}', 'g')

想法是在两遍[]匹配并替换最外层请参阅regex101上的示例:

通过1{0,0,0,[12,2],0,0,[12,[1,2,3]],12,0,[12,2,[2]],12,0,12,0,0}
通过2{0,0,0,{12,2},0,0,{12,[1,2,3]},12,0,{12,2,[2]},12,0,12,0,0}

\[[^][]*\] (未转义)匹配的一个实例 [...]

  • \[ 开口方括号
  • [^][]* 后跟任意数量的字符,没有方括号
  • \] 紧接着是一个方括号

注意的是,如果在字符串总是开头[,有端]和表示级0中的一个实例(不通过被分隔][)第一/内regexp_replace也可以通过替换来完成[^开始和]$端:E'^\\[(.*)\\]$'E'{\\1}'


要在此处添加嵌套的示例,其最大深度为4级:

\[([^][]|    # outer
\[([^][]|    # lvl 1
\[([^][]|    # lvl 2
\[([^][]|    # lvl 3
\[[^][]*\]   # lvl 4
)*\]
)*\]
)*\]
)*\]

将外部内部的内容包装[]捕获组中,四个级别的模式将变为:

\[(([^][]|\[([^][]|\[([^][]|\[([^][]|\[[^][]*\])*\])*\])*\])*)\]

需要使用时regex_replace可能需要额外的转义[]

\\[(([^][]|\\[([^][]|\\[([^][]|\\[([^][]|\\[[^][]*\\])*\\])*\\])*\\])*)\\]

可以像两次通过中的第一个模式一样使用它,并替换为 E'{\\1}'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PostgreSQL:正则表达式用花括号替换第一级方括号

来自分类Dev

正则表达式替换花括号内的点?

来自分类Dev

用正则表达式替换字符串(方括号中除外)

来自分类Dev

正则表达式,多个括号和方括号

来自分类Dev

VB正则表达式。用重复括号替换

来自分类Dev

正则表达式只返回最后一级大括号之间的字符串

来自分类Dev

正则表达式用括号第一次出现

来自分类Dev

带星号的正则表达式方括号

来自分类Dev

正则表达式不捕获方括号

来自分类Dev

正则表达式,允许方括号

来自分类Dev

正则表达式删除方括号/空格

来自分类Dev

正则表达式匹配方括号

来自分类Dev

正则表达式从方括号中提取?

来自分类Dev

正则表达式不包括方括号

来自分类Dev

正则表达式在方括号中查找句点

来自分类Dev

正则表达式查找方括号和文本

来自分类Dev

正则表达式匹配方括号

来自分类Dev

NP ++:用于查找方括号的正则表达式

来自分类Dev

如何用方括号构建正则表达式

来自分类Dev

带圆点的方括号的正则表达式

来自分类Dev

javascript正则表达式跳过方括号

来自分类Dev

正则表达式-从结果中删除方括号

来自分类Dev

正则表达式以方括号提取键值

来自分类Dev

正则表达式不包括方括号

来自分类Dev

方括号打破正则表达式?

来自分类Dev

Perl在正则表达式中的花括号

来自分类Dev

正则表达式省略花括号

来自分类Dev

正则表达式在花括号周围分裂

来自分类Dev

Perl在正则表达式中的花括号