8423651获取版本详细信息

tez616oj  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(372)

我正在尝试编写regex来获取版本细节。好像我在正则表达式中遗漏了什么。谢谢你的帮助。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class VersionValidator {

   public static void main(String[] args) {
     // This should print the "3.0.0.10240"
    System.out.println(getVersion("3.0.0.10240-8423651"));

    // This should print the "3.0.0.10240"
    System.out.println(getVersion("3.0.0.10240"));

    // This should print the "3.0.0"
    System.out.println(getVersion("3.0.0-8423651"));
  }

  /**
  *
  * 3.0.0.10240-8423651 -> 3.0.0.10240
  * 
  * 3.0.0.10240 -> 3.0.0.10240
  * 
  * 3.0.0-8423651 -> 3.0.0
  * 
  */
  public static String getVersion(String version) {
    Pattern vp = Pattern.compile("(\\d\\.\\d\\.\\d)(\\.\\d+)?(-\\d+)?");
    Matcher vm = vp.matcher(version);
    if (vm.matches()) {
        return vm.group(1);
    }
    return null;
  }
}
kr98yfug

kr98yfug1#

在我看来,你只是在追求眼前的一切——如果它存在的话。

String pattern = "^([\.0-9]+)(?:-[0-9]+)?$";
nkoocmlb

nkoocmlb2#

您需要的正则表达式是 (?<![^\d])\b(?:\d[\d.]*) 检查这个演示和解释。
正则表达式的解释:
消极落后
(?<![^\d]) \b 用于单词边界
非捕获组 (?:\d[\d.]*) 检查 java.util.regex.Pattern 了解更多关于这些模式的信息。您还可以查看oracle的正则表达式教程。
除了正则表达式之外,代码中的另一个问题是使用 Matcher#matches 而不是 Matcher#find .

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        System.out.println(getVersion("3.0.0.10240-8423651"));
    }

    public static String getVersion(String version) {
        Pattern vp = Pattern.compile("(?<![^\\d])\\b(?:\\d[\\d.]*)");
        Matcher vm = vp.matcher(version);
        if (vm.find()) {
            return vm.group();
        }
        return null;
    }
}

输出:

3.0.0.10240

相关问题