2013-07-10 67 views
0

我想匹配一個Java字符串(一個json的)模式。此模式在字符串中匹配多次,但它也與包含其他字符串的字符串匹配。 讓我用一個例子來解釋自己。當正則表達式匹配較大的字符串時獲取子匹配

String json = "IRRELEVANT_TEXT{'/element|1717_todossavoy/480/': {item_url:'/element|1717_Lorem/64/', item_description: 'Lorem ipsum dolor sit amet'},'/element|1717_Marcrie/480/': {item_url:'/element|1717_Vestibulum/64/', item_description: ' Vestibulum enim tellus, sodales sit amet consequat ut'},'/element|1717_Cannes05/434/': {item_url:'/element|1717_Nullam/64/', item_description: 'Nullam gravida risus vehicula nisi egestas'},'/element|1717_babelsavoy/266/': {item_url:'/element|1717_Pellentesque/64/', item_description: 'Pellentesque habitant morbi tristique senectus'}};IRRELEVANT"; 
    Matcher matcher = Pattern.compile("/element.*480/").matcher(json); 
    while(matcher.find()) { 
     System.out.println(matcher.group()); 
    } 

我得到以下幾點:

/element|1717_todossavoy/480/': {item_url:'/element|1717_Lorem/64/', item_description: 'Lorem ipsum dolor sit amet'},'/element|1717_Marcrie/480/ 

但我想拿到2個以下鍵:

/element|1717_todossavoy/480/ 
/element|1717_Marcrie/480/ 

我在做什麼錯?

+2

這是由於貪婪的正則表達式。查看http://stackoverflow.com/a/2301298/891391 – yatul

回答

4

.*貪婪並會嘗試匹配儘可能。你可以通過追加一個問號來使其不願意/不真實。 .*?

但是,這仍然不會給你你想要的,因爲/element|1717_Lorem/64/將匹配高達480。一個更好的正則表達式可能會是

/element[^/]+/480/ 
+1

+1查找'element。*?480'問題! – Kent

+0

感謝您的回覆。這節省了我的一天,它真的很可愛:) – y2josei

相關問題