Groovy 如何找到内部嵌套的内容?

Groovy 如何找到内部嵌套的内容?,groovy,Groovy,假设我有这样一个字符串: string = [+++[>>[--]]]abced 现在我需要一种方法来返回一个列表,该列表有:[[[-],[>>],[+++]]。这就是最深的[嵌套的内容,然后是其他嵌套。我提出了如下解决方案: def string = "[+++[>>[--]]]" loop = [] temp = [] string.each { bool = false if(it == "["){ temp = []

假设我有这样一个字符串:

string = [+++[>>[--]]]abced
现在我需要一种方法来返回一个列表,该列表有:
[[[-],[>>],[+++]]
。这就是最深的
[
嵌套的内容,然后是其他嵌套。我提出了如下解决方案:

def string = "[+++[>>[--]]]"
loop = []
temp = []
string.each {
    bool = false
    if(it == "["){
        temp = []
        bool = true
    }
    else if( it != "]")
        temp << it 
    if(bool)
         loop << temp

}
println loop.reverse()
def string=“[++[>>[--]]”
循环=[]
温度=[]
字符串。每个{
bool=false
如果(它=“[”){
温度=[]
布尔=真
}
否则,如果(它!=“]”)
温度],++++]]


有什么常规方法可以解决这个问题吗?

如果括号是对称的,可以引入一个计数器变量来保持括号嵌套的深度。输出中只允许深度级别大于0:

def string = "[+++[>>[--]]]abc"
loop = []
temp = []
depth = 0;
string.each {
  bool = false
  if(it == "["){
    temp = []
    bool = true
    depth++;
  }   
  else if (it == "]"){
    depth--;
  }   
  else if (depth > 0){ 
    temp << it  
  }   
  if(bool){
    loop << temp
  }   
}
println loop.reverse()
def string=“[++[>>[--]]]abc”
循环=[]
温度=[]
深度=0;
字符串。每个{
bool=false
如果(它=“[”){
温度=[]
布尔=真
深度++;
}   
else if(it==“]”){
深度--;
}   
如果(深度>0){

如果您不介意使用递归,可以使用这个

def sub(s , list){
    if(!s.contains('[') && !s.contains('[')) 
        return list
    def clipped = s.substring(s.lastIndexOf('[')+1, s.indexOf(']'))
    list.add(clipped)
    s = s - "[$clipped]"
    sub(s , list)
}
召唤

sub('''[+++[>>[--]]]abced''' , [])
返回大括号之间包含的所有子部分的列表

['--', '>>', '+++']
System.out

[--, >>, +++]
正则表达式模式中第一个组的捕获可能会得到改进。现在第一个组是不是
[
的任何字符,如果第一个
[
前面没有任何字符,那么第一个组将包含一个空字符串

[--, >>, +++]