java 一个正则表达式,它将捕获冒号之后但以逗号结尾的所有文本-其中可以嵌套括号、逗号等

mwyxok5s  于 2022-12-17  发布在  Java
关注(0)|答案(2)|浏览(77)

我正试着编辑一些log4j通常覆盖的东西。为了做到这一点,我正试着改变一个正则表达式,以确保它捕捉到我需要的东西...一个例子...

"definition":{"schema":{"columns":[{"dataType":"INT","name":"column_a","description":"description1"},{"dataType":"INT","name":"column_b","description":"description2"}]}}}, "some other stuff": ["SOME_STUFF"], etc.

希望能捕捉到...

{"schema":{"columns":[{"dataType":"INT","name":"column_a","description":"*** REDACTED ***"},{"dataType":"INT","name":"column_b","description":"description"}]}}}

我有这个...

(?<=("definition":{))(\\.|[^\\])*?(?=}})

如果我一直在末尾添加一个},它会一直突出显示我需要的内容。问题是列表中没有设置嵌套元素的数量。
是否有任何调整以上,使我可以捕捉一切在外部括号?

liwlm1x9

liwlm1x91#

如果在最后一个要匹配的方括号之后没有其他方括号,那么下面的正则表达式应该对你有用:

(?<=(\"definition\":))\{.*\}(?=\})

主要区别是将括号从环视表移动到匹配零件。
查看演示here

yqkkidmi

yqkkidmi2#

如果你不能使用一个合适的JSON解析器,这个正则表达式应该可以为你工作:

(?<=\"definition\":).+?}(?=,\h*\")

RegEx Demo

细目:

  • (?<=\"definition\":):Lookbehind条件,用于确保在当前位置之前存在"definition":
  • .+?}:匹配1+个以}结尾的字符
  • (?=,\h*\"):LookaheadAssert在当前位置之前有一个逗号,然后是0个或更多个空格,后跟"

相关问题