当正则表达式与更大的字符串匹配时获取子匹配

时间:2013-07-10 11:55:05

标签: java regex matcher

我正在尝试匹配Java字符串中的模式(json one)。此模式在字符串中多次匹配,但它也与包含其他模式的字符串匹配。 让我用一个例子来解释自己。

    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/

但是我想获得以下两个键:

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

我做错了什么?

1 个答案:

答案 0 :(得分:4)

.* 贪心并尝试尽可能匹配 。您可以通过附加问号使其不情愿/不合适。 .*?

但是,由于/element|1717_Lorem/64/将匹配480,因此 仍无法提供您想要的内容。一个更好的正则表达式可能是

/element[^/]+/480/