Regex 使用正则表达式查找整个json元素

Regex 使用正则表达式查找整个json元素,regex,Regex,我下面有一个json {“name”:“abc”,“config”:{“key”:1,“value”:“one”,“detail”:{“message”: “测试”}}} 我需要得到整个配置元素,它是“config”:{“key”:1,“value”:“one”,“detail”:{“message”:“testing”}使用正则表达式,我不想使用任何json解析器,配置可以包含任意数量的嵌套元素 我尝试使用正则表达式模式-“config”:{.*},但它一直在抓取,因为它是贪婪的 非常感谢您的

我下面有一个json

{“name”:“abc”,“config”:{“key”:1,“value”:“one”,“detail”:{“message”: “测试”}}}

我需要得到整个配置元素,它是
“config”:{“key”:1,“value”:“one”,“detail”:{“message”:“testing”}
使用正则表达式,我不想使用任何json解析器,配置可以包含任意数量的嵌套元素

我尝试使用正则表达式模式-
“config”:{.*}
,但它一直在抓取,因为它是贪婪的


非常感谢您的帮助

好的。我能够得到一个有效的解决方案,但是需要两个正则表达式才能完成

第一步,抓取
“config”
之后的所有内容。使用捕获组1的内容:

"config":({.*})
{(?>[^{}]|(?R))*}

第二步,使用递归正则表达式匹配平衡结构,在“平衡结构部分”中对此进行更多检查。它使用递归查找与
“config”:
之后的开始大括号相对应的结束大括号。使用匹配1的内容:

"config":({.*})
{(?>[^{}]|(?R))*}

好的。我能够得到一个有效的解决方案,但是需要两个正则表达式才能完成

第一步,抓取
“config”
之后的所有内容。使用捕获组1的内容:

"config":({.*})
{(?>[^{}]|(?R))*}

第二步,使用递归正则表达式匹配平衡结构,在“平衡结构部分”中对此进行更多检查。它使用递归查找与
“config”:
之后的开始大括号相对应的结束大括号。使用匹配1的内容:

"config":({.*})
{(?>[^{}]|(?R))*}

您可以使用此

"config":[\s\S]+?}(?=[,}])}
在这里,
[\s\s]+?
将匹配(惰性模式)后跟
}或,

您可以使用此

"config":[\s\S]+?}(?=[,}])}
在这里,
[\s\s]+?
将匹配(惰性模式)后跟
}或,



您使用的是什么语言?您需要设置非贪婪标志,然后应该适当地捕获我正在使用的javacheck this Try
“config”:{[^}]+}
。根据正则表达式引擎的不同,您可能必须在字符类中转义}。@CodeManiac它工作得很好,非常感谢,如果您想回复它,我会接受它。您使用的是什么语言?您需要设置非贪婪标志,然后应该适当地捕获我正在使用的javacheck this Try
“config”:{[^}]+}
。根据正则表达式引擎的不同,您可能必须在字符类中转义}。@CodeManiac它工作得很好,非常感谢,如果您愿意,您可以回复它,我将接受它。这比目前提出的其他解决方案要好,因为如果您有更多的更深层嵌套,它仍然有效。但是,如果在config对象之后有属性,那么这些属性也将得到匹配。如果这个边缘案例是相关的,这个解决方案将不起作用。@SørenD.Ptæus这就是你想要的@CodeManiac是的,没错。那样的话更一般一些+1@CodeManiac,你能帮帮我吗,这个正则表达式不适用于以下三个JSON 1。{“name”:“abc”,“config”:{“key”:1,“value”:{“one”:1},“detail”:“detail Message”}2。{“name”:“abc”,“config”:{“key”:1,“value”:“one”,“detail”:{“message”:“testing”},“deatil1”:{“message”:“testing”},“deatil2”:“detail2”},“config2”:{“key”:“vlaue”}3。{“name”:“abc”,“config”:{“key”:1,“value”:“one”,“detail”:{“message”:“testing”},“details1”:{“rules”:“aggregate”}]},“details2”:{“order”:0,“file”:“file1”}]},“config2”:{“key”:“vlaue”}这比目前提出的其他解决方案要好,因为如果有其他更深的嵌套,它仍然有效。但是,如果在config对象之后有属性,那么这些属性也将得到匹配。如果这个边缘案例是相关的,这个解决方案将不起作用。@SørenD.Ptæus这就是你想要的@CodeManiac是的,没错。那样的话更一般一些+1@CodeManiac,你能帮帮我吗,这个正则表达式不适用于以下三个JSON 1。{“name”:“abc”,“config”:{“key”:1,“value”:{“one”:1},“detail”:“detail Message”}2。{“name”:“abc”,“config”:{“key”:1,“value”:“one”,“detail”:{“message”:“testing”},“deatil1”:{“message”:“testing”},“deatil2”:“detail2”},“config2”:{“key”:“vlaue”}3。{“name”:“abc”,“config”:{“key”:1,“value”:“one”,“detail”:{“message”:“testing”},“details1”:{“rules”:[{“rule”:“aggregate”}]},“details2”:[{“order”:0,“file”:“file1”}]},“config2”:{“key”:“vlaue”}@shalaj shukla你看过我更新的答案了吗?它适用于你分享的所有例子。它适用于我。检查是否有额外的尾随空间@shalaj Shukla删除了我的评论,我错误地在+1结尾添加了一些空格,谢谢欢迎!你能把我的答案更新为正确的答案吗?你能检查一下这个{“key”:1,“config”:{“id1”:1,“Details”:[{“id”:1,“name”:“name”,“dataType”:“str”,“standard”:{“set”:{“dataset”:[“dd”],“colns”:[“col1”,“col2”]},“message”:{“rules”:[{“rule”:“rule”:“rule 1”,“percent”:100,“amtType”:“aggregate”:“100”,“amtType”:“amtType”:1}”,重申:{“规则”:[“规则1”,“规则2”]}}}}],“存储”:{“dim”:{“rootUrl”:“url”,“accountKey”:“key”},“事实”:{“rootUrl”:“url”,“accountKey”:“key”}}}},,“Details1”:{“name”:“value”,“name1”:“value1”},“state”:“Ready”,“Details2”:[{“key”:1,“value”:“one”},它吸引了超过expected@shalaj-shukla你看了我更新的答案了吗?它适用于你分享的所有示例。它对我有效。检查你是否有额外的尾随空格。@shalaj shukla删除了我的评论,我错误地在+1结尾添加了一些空格,谢谢!不客气!你能更新我的答案吗正确的一个?你能检查一下这个{“key”:1,“config”:{“id1”:1,“Details”:[{“id”:1,“name”:“name”,“dataType”:“str”,“standard”:{“dataset”:[“dd”],“columns”:[“col1”,“col2”]},message:{“rules”:[{“rule”:“rule1”,“percent”:100,“amtType”:1},{“rule”:“aggregate”,“percent”:100,“amtType”:1},“amtType”:1}”,重述:{“rules”:“rule1”,“rule1”,“rule2”}”存储:{“dim”:{“rootUrl”:“url”,“accountKey”:“key”},事实:{“rootUrl”:“url”,“accountKey”:“key”}},细节1:{“name”: