我有一个字符串:
bundle://24.0:0/com/keop/temp/Activator.class
从这个字符串我需要得到com/keop/temp/Activator
但是以下模式:
Pattern p = Pattern.compile("bundle://.*/(.*)\\.class");
仅返回Activator
。我的错误在哪里?
答案 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
^