我想在字符串中找到所有外方括号对的内容。
如果外部对具有内部对,则不应单独匹配。
例如字符串:[abc][123][cde[456[aq[]1q1]]]
结果应为:
任何帮助都将受到高度赞赏......
答案 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;如果它以^或]开头,并且[或$之后。