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

时间:2014-11-24 15:38:03

标签: java regex square-bracket

我想在字符串中找到所有外方括号对的内容。

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

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

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

任何帮助都将受到高度赞赏......

3 个答案:

答案 0 :(得分:1)

正如已经说过的,使用正则表达式 是不可能的。以下是方式

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;
}

改变&#34; {&#34;到&#34; [&#34;和其他修正。

答案 1 :(得分:0)

这有效:)

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

答案 2 :(得分:-1)

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

使用最外面的括号,它们旁边总是有一个括号或字符串的结尾或字符串的开头 所以这基本上是匹配&#34; [某事]&#34;如果它以^或]开头,并且[或$之后。