我正在编写一个正则表达式来匹配以下类型的字符串:
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
如何在我的正则表达式中包含最后一个案例?
答案 0 :(得分:5)
答案 1 :(得分:2)
这应该适合你:
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。
答案 2 :(得分:1)
你能试试吗
^my-jar(-|\\.)?(?:(\\d*)\\.)?(?:(\\d*)\\.)?(?:(\\d*)\\.)?(\\*|\\d*).jar$
答案 3 :(得分:1)
尝试
^my-jar(?:-\d+(?:\.\d+)*)?\.jar$
它与强制文件名my-jar
匹配,然后有一个可选的非捕获组,如果接下来是数字,则匹配。然后,仍然在第一个可选组内,还有另一个非捕获组,它可以重复任意数量的时间(0 -...),并带有一个开始点后跟数字。
最后,无论是否匹配了可选组,它都会通过匹配.jar
序列而结束。