与包含点的字符串匹配的模式

GJa*_*ain 4 java regex

模式是:

private static Pattern r = Pattern.compile("(.*\\..*\\..*)\\..*");
Run Code Online (Sandbox Code Playgroud)

字符串是:

    sentVersion = "1.1.38.24.7";
Run Code Online (Sandbox Code Playgroud)

我做:

    Matcher m = r.matcher(sentVersion);
    if (m.find()) {
        guessedClientVersion = m.group(1);
    }
Run Code Online (Sandbox Code Playgroud)

我期待1.1.38,但模式匹配失败.如果我换到Pattern.compile("(.*\\..*\\..*)\\.*");

//注意我删除了"." 在最后一个*之前

然后1.1.38.XXX失败了

我的目标是在任何传入的字符串中找到(xxx).

我哪里错了?

anu*_*ava 5

问题可能是由于你的正则表达式的贪婪.尝试这种基于否定的正则表达式模式:

private static Pattern r = Pattern.compile("([^.]*\\.[^.]*\\.[^.]*)\\..*");
Run Code Online (Sandbox Code Playgroud)

在线演示:http://regex101.com/r/sJ5rD4