带换行符的字符串中的JAVA最长模式匹配

带换行符的字符串中的JAVA最长模式匹配,java,regex,pattern-matching,line-breaks,Java,Regex,Pattern Matching,Line Breaks,如何匹配具有换行符的字符串中的图案? e、 g 我只想抓住这个 {"title":"my json", "items" : [{ "A": "a", "B": "b"} ] } 我试过类似的东西 String pattern = ".*(\\{.*\\}).*"; Pattern r = Pattern.compile(pattern, Pattern.DOTALL);

如何匹配具有换行符的字符串中的图案? e、 g

我只想抓住这个

{"title":"my json",
             "items" : [{ "A": "a",
                          "B": "b"}
                       ]
}
我试过类似的东西

String pattern = ".*(\\{.*\\}).*";
Pattern r = Pattern.compile(pattern, Pattern.DOTALL);
但是没有成功。有什么建议吗


我只是想说清楚。这是我的

一个JSON对象的问题,因为输入很简单:您的第一个
*
是贪婪的。所以它会消耗所有东西,直到最后一个
{
,后面仍然是
}
。如果将
*
ungreedy(或忽略它),则应获得完整的JSON对象:

String pattern = ".*?(\\{.*\\}).*";
但是你可以(也应该)完全省略开头和结尾的重复:

String pattern = "\\{.*\\}";
然后你甚至不需要捕捉任何东西。请注意,这必须与
find
一起使用,而不是与
匹配项一起使用

但是,您的输入有多个JSON对象。这就是正则表达式的问题所在。一些引擎支持允许正确嵌套括号的结构(以检查哪些括号实际上属于一起)。但是这些正则表达式很容易变得丑陋,并且不可维护


最好是手动遍历字符串,并计算当前嵌套级别。无论何时回到顶层,只需切断一个子串(从相应的开始括号到当前位置)。

没有成功。它失败了吗?你选错一对了吗?哪一个?我假设你从
“A”…
“开始捕获所有内容,对吗?@Reimeus,这是一个JSON解析器实现,我想做的是你总是有一个输入是这种格式吗?我的意思是,它总是以某个JSON对象作为参数的函数调用?在这种情况下,您不能使用子字符串吗?您真的不应该使用正则表达式进行自由格式的JSON解析。这就是你输入的内容吗?@m.buettner,它捕获了一个错误的模式。我想把整个JSON放在一个字符串中,但它只捕获像“{”m:“}”这样的字符串,谢谢。我习惯于用Python编程,我喜欢重新编程来解决问题,但在这个特殊的问题上,我认为最好的解决方案是
String sub=s.substring(s.indexOf(“{”),s.lastIndexOf(“}”)+1)
@Medeiros是的,对于单个JSON对象,这可能是最好(也是最可读)的解决方案。但是,对于包含JSON对象列表的文件,它仍然无法解决您的问题。
String pattern = "\\{.*\\}";