簡體   English   中英

Java:正則表達式查找外部方括號對

[英]Java: regex to find outer square brackets pairs

我想找到一個字符串中所有外部方括號對的內容。

如果外部對具有內部對,則不應單獨匹配。

例如字符串: [abc][123][cde[456[aq[]1q1]]]結果應為:

  • abc
  • 123
  • cde [456 [aq [] 1q1]]

任何幫助將不勝感激...

如前所述, 使用regex不可能的 以下是方法

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

將“ {”更改為“ [”,以及其他修復程序。

這有效:)

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

使用最外面的括號時,始終在其旁邊或字符串的末尾或字符串的開頭有一個括號,因此,如果它以^或]開頭並在其后有[或$,則它本質上與“ [something]”匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM