【问题标题】:Regex to match version number for zero or more time正则表达式匹配版本号零次或多次
【发布时间】:2016-09-28 14:07:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: java regex


    【解决方案1】:

    下面的正则表达式会有什么问题吗:

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

    演示在这里:

    Regex101

    【讨论】:

      【解决方案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。

      【讨论】:

        【解决方案3】:

        你可以试试这个

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

        【讨论】:

        • 不可扩展。如果 OP 想要有 5 个级别的版本怎么办?即 1.2.3.4.5?
        • @TheLostMind...同意
        【解决方案4】:

        试试

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

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

        最后,无论可选组是否匹配,都以匹配.jar序列结束。

        Check it out at regex101 here.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-31
          • 2012-01-28
          • 1970-01-01
          • 2020-10-10
          相关资源
          最近更新 更多