java 正则表达式 提取字符串

Java code
            
            
public static void main(String[] args) { String source = " first {test} is here,two {test2} is here! " ; String find = " \\u007B.*\\u007D " ; Pattern pattern = Pattern.compile(find); Matcher matcher = pattern.matcher(source); while (matcher.find()) { System.out.println(matcher.group()); } }


我要实现的是将{test}和{test2}提取出来。但是用
Java code
            
            
String find = " \\u007B.*\\u007D " ;

获取出来的是
{test} is here,two {test2}
貌似获取的是第一个{和最后一个}。我怎么能用正则去提取每一对{}的呢?
因为这个字符串的内容不是固定的。所以无法使用类似下面的方式解决:
Java code
            
            
String input = " first {test} is here,two {test2} is here! " ; Scanner scanner = new Scanner (input); scanner.findInLine ( " first (.+) is here,two (.+) is here! " ); MatchResult result = scanner.match();
 
 
回复次数: 7<!-- | 浏览次数: 75-->
#1楼 得分:5回复于:2010-08-24 14:10:49
Java code
            
            
(\\{ ^ \\} + \\})
 
#2楼 得分:5回复于:2010-08-24 14:11:15
"\\u007B.*?\\u007D";
 
#3楼 得分:5回复于:2010-08-24 14:13:38
普及一下“非贪婪匹配”的知识。
一般情况下我们做的都是贪婪匹配,即能匹配到的最长的字符串。也就是你现在遇到的问题,把第一个左括号和第二个右括号中的大段匹配出来。
而这个时候需要用到非贪婪匹配,也就是,从左到右匹配,只要遇到符合要求的字符串,无论它是否是最长的,都把它拿出来当做匹配结果。
使用方法是在表示多个匹配的通配符,如*,+,{m,n}之后加上一个问号?,就能实现了。
 
#4楼 得分:5回复于:2010-08-24 14:14:35
Java code
            
            
String find = " \\{.*?\\} " ;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值