2017-04-12 34 views
0
"foo" { 
    foo = "bar" 
    foo2 = "bar2" 
    foo3 = "bar3" 
    foo4 = "bar4" 
    id = "1" 
    foo5 = "bar5" 
} 
"foo" { 
    foo = "bar" 
    foo2 = "bar2" 
    foo3 = "bar3" 
    foo4 = "bar4" 
    id = "2" 
    foo5 = "bar5" 
} 
"foo" { 
    foo = "bar" 
    foo2 = "bar2" 
    foo3 = "bar3" 
    foo4 = "bar4" 
    id = "3" 
    foo5 = "bar5" 
} 
... 

我的正则表达式通过它们的ID选择此表项,但它也能够选择任何前进他,当我需要它时首先停止“}”被发现。我不知道如何防止这种情况。正则表达式的帮助,需要删除“表”项

我的正则表达式是:/^"(?P<title>[^"]*)"[^{]*{(?=(.*))(?=[^}]*\sid\s*=\s+"2"[^}])/ixsmg

https://regex101.com/r/xA9kG3/26

+0

哦,上帝,它已经为你为我如此简单,所以并不明显..谢谢,克里斯! – KAYOver

+1

'ixsmg':使用世界上所有的修饰符不会增加你找到好模式的机会。 –

回答

1

.*被消耗太多。你需要告诉它在第一场比赛中停下来,并告诉它该比赛的基础是什么。

^"(?P<title>[^"]*)"[^{]*{ 
        (?=(.*?})) 
        (?=[^}]*\sid\s*=\s+"2"[^}]) 

这将停止在第一个}。如果你在这个字符串结构中有{},这将不起作用。

演示:https://regex101.com/r/xA9kG3/27