Java正则表达式模式问题

时间:2015-04-16 21:05:45

标签: java regex

我有一个字符串:

bundle://24.0:0/com/keop/temp/Activator.class

从这个字符串我需要得到com/keop/temp/Activator但是以下模式:

Pattern p = Pattern.compile("bundle://.*/(.*)\\.class"); 

仅返回Activator。我的错误在哪里?

2 个答案:

答案 0 :(得分:3)

您的正则表达式使用与匹配任何字符(但换行符)的.进行贪婪匹配。 .*/会查到最终/之前的所有内容,(.*)\\.会匹配最后一段时间内的所有内容。您可以在要匹配的字符串之前限制与非/匹配的字符,而不是延迟匹配。改为

Pattern p = Pattern.compile("bundle://[^/]*/(.*)\\.class"); 

示例代码:

String str = "bundle://24.0:0/com/keop/temp/Activator.class";
Pattern ptrn = Pattern.compile("bundle://[^/]*/(.*)\\.class");
Matcher matcher = ptrn.matcher(str);
if (matcher.find()) {
   System.out.println(matcher.group(1));

sample program的输出:

com/keop/temp/Activator

答案 1 :(得分:3)

您需要使用.*跟随初始令牌?进行non-greedy匹配。

bundle://.*?/(.*)\\.class
           ^