Java:正则表达式来找到外部方括号对

问题描述:

我想查找字符串中所有外部方括号对的内容。Java:正则表达式来找到外部方括号对

如果外部配对具有内部配对,则不应单独配对。

例如字符串:[abc][123][cde[456[aq[]1q1]]]结果应该是:

  • ABC
  • CDE [456 [水溶液[] 1Q1]]

任何帮助将高度赞赏。 ..

+0

你不能用java的正则表达式,因为它不支持递归和平衡组。 – 2014-11-24 15:42:43

+0

你不能使用任何**正则表达式,因为它们[无法通过设计递归匹配](http://*.com/questions/133601/can-regular-expressions-be-used-to-match-nested -patterns)。 – 2014-11-24 16:11:20

+0

嵌套层次是否有限制? – 2014-11-24 16:14:42

"(^|\])\[(.*)\]($|[)" 

u唱最外面的括号总是有他们旁边的支架或字符串的结尾或字符串的开始 所以这基本上匹配“[某事]”,如果它的前面有^或]并且[或$后面。

+0

这不适用于嵌套。 – 2014-11-24 16:11:57

这工作:)

 String[] ans=input.replaceAll("^\\[|\\]$","").replaceAll("\\]\\["," ").replaceAll(" ","\\[\\]\\[\\]").replaceAll("\\[\\] ","\\[\\]\\[\\]").split(" "); 
     System.out.println(Arrays.toString(ans)); 

前面已经说了,这是不可能用正则表达式。以下是方式

public List<String> readValidJsonStrings(String allText) { 
    List<String> jsonList = new ArrayList<String>(); 
    int[] endsAt = new int[1]; 
    endsAt[0] = 0; 
    while(true) { 
     int startsAt = allText.indexOf("{", endsAt[0]); 
     if (startsAt == -1) { 
      break; 
     } 
     String aJson = parseJson(allText, startsAt, endsAt); 
     jsonList.add(aJson); 
    } 
} 

private static String parseJson(String str, int startsAt, int[] endsAt) { 

    Stack<Integer> opStack = new Stack<Integer>(); 
    int i = startsAt + 1; 
    while (i < str.length()) { 

     if (str.charAt(i) == '}') { 
      if (opStack.isEmpty()) { 
       endsAt[0] = i + 1; 
       return str.substring(startsAt, i + 1); 
      } else { 
       opStack.pop(); 
      } 
     }else if (str.charAt(i) == '{') { 
      opStack.push(i); 
     } 

     i++; 
    } 

    return null; 
} 

将“{”更改为“[”和其他修复程序。