Как уже говорилось, это не представляется возможным с регулярным выражением. Ниже приведен путь
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;
}
Изменить «{" to "[" и другие исправления.
Вы не можете использовать регулярное выражение java, поскольку оно не поддерживает группы рекурсии или балансировки. –
Вы не можете использовать ** любое ** регулярное выражение, поскольку они [не могут соответствовать рекурсивно по дизайну] (http://stackoverflow.com/questions/133601/can-regular-expressions-be-used-to-match-nested -patterns). –
есть ли ограничение уровней гнездования? –