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

Java 包含点的字符串的模式匹配,java,regex,Java,Regex,模式是: private static Pattern r = Pattern.compile("(.*\\..*\\..*)\\..*"); 字符串为: sentVersion = "1.1.38.24.7"; 我有: 我期望1.1.38,但模式匹配失败。如果我改为Pattern.compile((.\\\\\\\\\\\\\\\\\\\\\\.*)\\.*) //请注意,我在最后一个之前删除了“.”* 然后1.1.38.XXX失败 我的目标是在任何传入字符串中查找(x.x.x)

模式是:

private static Pattern r = Pattern.compile("(.*\\..*\\..*)\\..*");
字符串为:

    sentVersion = "1.1.38.24.7";
我有:

我期望1.1.38,但模式匹配失败。如果我改为
Pattern.compile((.\\\\\\\\\\\\\\\\\\\\\\.*)\\.*)

//请注意,我在最后一个之前删除了“.”*

然后
1.1.38.XXX
失败

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


我哪里错了?

问题可能是由于您的正则表达式过于贪婪。尝试此基于否定的正则表达式模式:

private static Pattern r = Pattern.compile("([^.]*\\.[^.]*\\.[^.]*)\\..*");

在线演示:使您的
*
匹配?

Pattern r = Pattern.compile("(.*?\\..*?\\..*?)\\..*");
否则,
*
将匹配整个
字符串

请看这里:
Pattern r = Pattern.compile("(.*?\\..*?\\..*?)\\..*");