2016-09-28 62 views
1

我寫一個正則表達式來匹配以下字符串類型:正則表達式匹配的版本號零個或更多的時間

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他在我的正則表達式中的最後一個案例?

回答

4

會不會有什麼毛病下面的正則表達式:

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

演示在這裏:

Regex101

1

這應該爲你工作:

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。

1

你可以試試這個

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

不可擴展。如果OP想要有5個級別的版本會怎麼樣?即1.2.3.4.5? – TheLostMind

+0

@TheLostMind ...同意 – mhasan

0

嘗試

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

它的強制性文件名,my-jar匹配,然後有一個可選的非捕獲組,如果後面數字的連字符匹配接下來。然後,仍然在第一個可選組中,還有另一個非捕獲組,可以重複任意次數(0 -...),開始點後跟數字。

最後,無論可選組是否已匹配,它最後都會匹配.jar序列。

Check it out at regex101 here