如何匹配包含换行符的字符串中的模式? e.g。
requisition({"title":"my json",
"items" : [{ "A": "a",
"B": "b"}
]
})
我只想抓住这个
{"title":"my json",
"items" : [{ "A": "a",
"B": "b"}
]
}
我试过像
这样的东西String pattern = ".*(\\{.*\\}).*";
Pattern r = Pattern.compile(pattern, Pattern.DOTALL);
但没有成功。任何sugestions?
只是为了说清楚。这是我的input
答案 0 :(得分:1)
单个JSON对象作为输入的问题很简单:您的第一个.*
是贪婪的。所以它会消耗所有内容,直到最后{
仍然跟着}
。如果您将.*
取消了(或将其删除),则应获取完整的JSON对象:
String pattern = ".*?(\\{.*\\}).*";
但你可以(并且应该)完全忽略开头和尾随重复:
String pattern = "\\{.*\\}";
然后你甚至不需要捕捉任何东西。请注意,这必须与find
一起使用,而不是matches
。
但是,您的输入有多个JSON对象。这就是你遇到正则表达式问题的地方。一些引擎支持允许正确嵌套括号的构造(以检查哪些实际上属于一起)。但是那些正则表达式很容易变得丑陋而且难以维护。
你最好,手动移动字符串,并保持当前嵌套级别的计数。每当你回到顶层时,你只需切断一个子串(从相应的开口括号到你当前的位置)。