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

时间:2016-09-28 05:52:35

标签: java regex

我正在编写一个正则表达式来匹配以下类型的字符串:

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

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

4 个答案:

答案 0 :(得分:5)

以下正则表达式是否有任何问题:

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

在这里演示:

Regex101

答案 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" ==&gt;从my-jar开始,后跟“。”。或-和一组或多组<digit>.然后`jar。

答案 2 :(得分:1)

你能试试吗

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

答案 3 :(得分:1)

尝试

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

它与强制文件名my-jar匹配,然后有一个可选的非捕获组,如果接下来是数字,则匹配。然后,仍然在第一个可选组内,还有另一个非捕获组,它可以重复任意数量的时间(0 -...),并带有一个开始点后跟数字。

最后,无论是否匹配了可选组,它都会通过匹配.jar序列而结束。

Check it out at regex101 here