正则表达式匹配的版本号零个或更多的时间
问题描述:
我写一个正则表达式来匹配以下字符串类型:正则表达式匹配的版本号零个或更多的时间
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他在我的正则表达式中的最后一个案例?
答
这应该为你工作:
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$
答
尝试
^my-jar(?:-\d+(?:\.\d+)*)?\.jar$
它的强制性文件名,my-jar
匹配,然后有一个可选的非捕获组,如果后面数字的连字符匹配接下来。然后,仍然在第一个可选组中,还有另一个非捕获组,可以重复任意次数(0 -...),开始点后跟数字。
最后,无论可选组是否已匹配,它最后都会匹配.jar
序列。
不可扩展。如果OP想要有5个级别的版本会怎么样?即1.2.3.4.5? – TheLostMind
@TheLostMind ...同意 – mhasan