Wie wäre es : \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]
?
Diese Regex sucht nach Text zwischen einem Doppelpunkt gefolgt von einem Leerzeichen und einem doppelten Anführungszeichen und einem weiteren doppelten Anführungszeichen gefolgt von einem Komman oder schließenden geschweiften Klammern. Der Text zwischen diesen muss aus etwas *, mindestens einem Zitat und etwas * bestehen.
* etwas bedeutet alles (einschließlich leerer String), das kein Zitat gefolgt von Komma oder schließender geschweifter Klammer enthält, da dies den Wert beenden würde.
Angewandt auf Ihr Beispiel (korrigiert, um das Komma durch einen Doppelpunkt zu ersetzen), gibt es Val"ue1
zurück.
String json = "{\"Key\": \"Value\", \"Key1\": \"Val\"ue1\"}";
Matcher m = Pattern.compile(": \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]").matcher(json);
while (m.find())
{
System.out.println(m.group(1));
}
Ihr JSON scheint nicht gültig für mich. Wenn du kannst, entkomme entweder diesem hässlichen "oder benutze stattdessen ein einfaches Zitat. – Antoine