Java 在侧大括号中获取字符串,该字符串中的大括号中也有更多值
这是我的(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
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例如我把答案贴了出来。