perl 嵌套正则表达式

perl nested regex

文字记录:

(1,2,3,4,{fred,don,max,rat,grp},45,67,mat,jhon,{a,b,1,2,sd[{1,2},{4,5}],45,67,P[{34,56,34},{uni,cast,r}],c{q,ew,3,4},1,2,3,cf{2,4,5,8},6},4,fr{24,45,67},5,NOL)

期望的输出:

(1,2,3,4,{fred:don:max:rat:grp},45,67,mat,jhon,{a:b:1:2:sd[{1:2}:{4:5}]:45:67:P[{34:56:34}:{uni:cast:r}]:c{q:ew:3:4}:1:2:3:cf{2:4:5:8}:6},4,fr{24:45:67},5,NOL)

以下需要替换为:

  1. {}[]
  2. 之间的所有内容
  3. 数据具有嵌套结构,如 {{}}{[],[]}
  4. 文字记录总是在().
  5. 之间

感谢任何有关 perl 的帮助。

您可以尝试下面的 perl 命令,它使用基于正则表达式的前瞻性。

perl -pe 's/,(?=(?:\{[^{}]*\}|[^{}])*})|,(?=(?:\[[^\[\]]*\]|[^\[\]])*\])/:/g' file

DEMO