Java 在侧大括号中获取字符串,该字符串中的大括号中也有更多值

Java 在侧大括号中获取字符串,该字符串中的大括号中也有更多值,java,regex,string,Java,Regex,String,这是我的(java)字符串 我想得到外部花括号中的所有内容。我该怎么做?到目前为止,我已经尝试了以下方法 Pattern p = Pattern.compile("\\{([^}]*)\\}"); Matcher m = p.matcher(s); while(m.find()){ System.out.println(m.group(1)); } 然而,这只是印刷品 "Key1": "Val1", "Key2": {"embedKey1": "e

这是我的(java)字符串

我想得到外部花括号中的所有内容。我该怎么做?到目前为止,我已经尝试了以下方法

    Pattern p = Pattern.compile("\\{([^}]*)\\}");
    Matcher m = p.matcher(s);
    while(m.find()){
       System.out.println(m.group(1));
    }
然而,这只是印刷品

"Key1": "Val1", "Key2": {"embedKey1": "embedVal1", "embedKey2": "embedVal2"

有人能帮我吗?

对于您的特定示例,您可以使用如下正则表达式:

\{(.*?)\{.*?}(.*?)}
\{(.*)}

匹配信息

MATCH 1
1.  [40-64] `"Key1": "Val1", "Key2": `
2.  [116-149]   `, "Key3" : "Val3", "Key3": "Val4"`
MATCH 1
1.  [40-149]    `"Key1": "Val1", "Key2": {"embedKey1": "embedVal1", "embedKey2": "embedVal2"}, "Key3" : "Val3", "Key3": "Val4"`
QUICK REFERENCE
另一方面,如果您想捕捉内部花括号,可以使用以下更简单的方法:

\{(.*?)\{.*?}(.*?)}
\{(.*)}

匹配信息

MATCH 1
1.  [40-64] `"Key1": "Val1", "Key2": `
2.  [116-149]   `, "Key3" : "Val3", "Key3": "Val4"`
MATCH 1
1.  [40-149]    `"Key1": "Val1", "Key2": {"embedKey1": "embedVal1", "embedKey2": "embedVal2"}, "Key3" : "Val3", "Key3": "Val4"`
QUICK REFERENCE
记住在java中转义反斜杠:

Pattern p = Pattern.compile("\\{(.*)}");
Matcher m = p.matcher(s);
while(m.find()){
   System.out.println(m.group(1));
}

要使所有内容位于外括号之间,或第一个
{
和最后一个
}
之间,请使用贪婪匹配和匹配所有符号的
匹配(使用DOTALL模式):


(?s)
模式.DOTALL
修饰符的内联版本。

如果它是您在问题中提到的最外面的“{”和“}”,这可能是非正则表达式方法之一

    int first=s.indexOf('{');
    int last=s.lastIndexOf('}');

    String result=s.substring(first, last+1);

不要使用正则表达式。使用JSON解析器。贪婪匹配如何:
Pattern p=Pattern.compile((?s)\{(.*)\})?哦,亲爱的,贪婪的配对成功了。有没有办法接受这个答案?如果你能简单地解释一下正则表达式实际上在做什么,那也太棒了。谢谢@stribizhev@DjShon例如我把答案贴了出来。