簡體   English   中英

正則表達式匹配版本號零或更多時間

[英]Regex to match version number for zero or more time

我正在編寫一個正則表達式來匹配以下類型的字符串:

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

借助A正則表達式進行版本號解析,我發現了以下內容

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

如何在我的正則表達式中包含最后一個案例?

以下正則表達式是否有任何問題:

^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$

嘗試

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

它匹配強制文件名my-jar ,然后有一個可選的非捕獲組,如果接下來是數字,則匹配。 然后,仍然在第一個可選組內,還有另一個非捕獲組,它可以重復任意數量的時間(0 -...),帶有一個開始點后跟數字。

最后,無論是否匹配了可選組,它都會通過匹配.jar序列而結束。

在這里查看regex101

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM