[英]Java: regex to find outer square brackets pairs
我想找到一個字符串中所有外部方括號對的內容。
如果外部對具有內部對,則不應單獨匹配。
例如字符串: [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.