正则表达式匹配的版本号零个或更多的时间

问题描述:

我写一个正则表达式来匹配以下字符串类型:正则表达式匹配的版本号零个或更多的时间

my-jar-1.2.3.5.jar 
my-jar.jar 
my-jar-1.2.jar 

随着 A regex for version number parsing 的帮助下,我想通了以下

String pat = "^my-jar(-|\\.)?(?:(\\d+)\\.)?(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+).jar$"; 
Pattern patt = Pattern.compile(pat); 
System.out.println("For my-jar-1.2.jar - " + patt.matcher("my-jar-1.2.jar").find()); 
System.out.println("For my-jar-1.2.3.5.jar - " + patt.matcher("my-jar-1.2.3.5.jar").find()); 
System.out.println("For my-jar.jar - " + patt.matcher("my-jar.jar").find()); 

输出为

For my-jar-1.2.jar - true 
For my-jar-1.2.3.5.jar - true 
For my-jar.jar - false 

如何包含t他在我的正则表达式中的最后一个案例?

会不会有什么毛病下面的正则表达式:

^my-jar(\-\d+|\-\d+(\.\d+)*)?\.jar$ 

演示在这里:

Regex101

这应该为你工作:

public static void main(String[] args) { 
    String s1 = "my-jar-1.2.3.5.jar"; 
    String s2 = "my-jar.jar"; 
    String s3 = "my-jar-1.2.jar"; 

    System.out.println(s1.matches("my-jar(?:\\.|\\-(\\d+.)+)jar")); 
    System.out.println(s2.matches("my-jar(?:\\.|\\-(\\d+.)+)jar")); 
    System.out.println(s3.matches("my-jar(?:\\.|\\-(\\d+.)+)jar")); 
} 

O/P:

真 真 真

"my-jar(?:\\.|\\-(\\d+.)+)jar" ==>与my-jar后跟一个启动 “”或一个-和一套或多套<digit>.然后`jar。

你可以试试这个

^my-jar(-|\\.)?(?:(\\d*)\\.)?(?:(\\d*)\\.)?(?:(\\d*)\\.)?(\\*|\\d*).jar$ 
+0

不可扩展。如果OP想要有5个级别的版本会怎么样?即1.2.3.4.5? – TheLostMind

+0

@TheLostMind ...同意 – mhasan

尝试

^my-jar(?:-\d+(?:\.\d+)*)?\.jar$ 

它的强制性文件名,my-jar匹配,然后有一个可选的非捕获组,如果后面数字的连字符匹配接下来。然后,仍然在第一个可选组中,还有另一个非捕获组,可以重复任意次数(0 -...),开始点后跟数字。

最后,无论可选组是否已匹配,它最后都会匹配.jar序列。

Check it out at regex101 here