模式是:
private static Pattern r = Pattern.compile("(.*\\..*\\..*)\\..*");
字符串是:
sentVersion = "1.1.38.24.7";
我做:
Matcher m = r.matcher(sentVersion);
if (m.find()) {
guessedClientVersion = m.group(1);
}
我期待1.1.38,但模式匹配失败。如果我改为Pattern.compile("(.*\\..*\\..*)\\.*");
//注意我删除了“。”在最后一次*
之前
然后1.1.38.XXX
失败
我的目标是在任何传入的字符串中找到(x.x.x)。
我哪里错了?
答案 0 :(得分:5)
问题可能是由于你的正则表达式的贪婪。尝试这种基于否定的正则表达式模式:
private static Pattern r = Pattern.compile("([^.]*\\.[^.]*\\.[^.]*)\\..*");
答案 1 :(得分:2)
使用.*
?
个匹配reluctant
Pattern r = Pattern.compile("(.*?\\..*?\\..*?)\\..*");
否则.*
会匹配整个String
值。