我有一个很大的JSON文件,格式化为多行。我想找到不具有给定属性的对象。保证对象不包含任何进一步的嵌套对象。假设给定属性为"bad"
,那么我想在下面的第二个元素中找到"foo"
的值(但不是在第一个元素中)。
{
result: [
{
"foo" : {
"good" : 1,
"bad" : 0
},
"bar" : 123
},
{
"foo" : {
"good" : 1
},
"bar" : 123
}
]
}
我知道multi-line regexes in Vim,但我无法得到任何符合我想要的东西。有什么指针吗?
答案 0 :(得分:4)
尝试以下方法:
/\v"foo"\_s*:\_s*\{%(%(\_[\t ,]"bad"\_s*:)@!\_.){-}\}
当你需要排除某些东西时,你应该看看负面前瞻或后视(后者是慢的,不像vim Perl / PCRE正则表达式不支持后视除了固定宽度(或许多替代)固定宽度)。)
答案 1 :(得分:1)
JSON是context free grammar,因此不是常规的。除非你能给出一套更严格的规则,否则正则表达式都无法做你想做的事。