繁体   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