【发布时间】:2019-07-15 17:22:41
【问题描述】:
这里是 Java 8。我被传递了一个String,我需要判断它是否与我们对语义版本化 JAR 文件的间隔再现相匹配,其中:
- 以任何字母数字字符串开头(此处也允许使用连字符)
- 后跟一个连字符 (
-) - 后跟正常 semver:
- 主要版本号;那么
- 次要版本号;那么
- 补丁号
- 以
.jar后缀结尾
有效文件名示例:
some-lib-1.4.17.jarsomeLib-1.4.17.jarsomelib-0.12.0.jar
迄今为止我最好的尝试:
public boolean isValidJarName(String jarName) {
String fileRegex = "^([a-zA-Z\\-))((\\d+)\\.(\\d+)\\.(\\d+)).jar";
Pattern filePattern = Pattern.compile(fileRegex);
Matcher matcher = filePattern.matcher(jarName);
return matcher.matches();
}
但是这给了我一个编译器错误:Unclosed character class。所以我的正则表达式在语法上有些问题,但我什至不确定它是否正确设置为我正在寻找的东西。有什么想法会出错吗?
【问题讨论】:
-
[缺少结尾]。所以我想它应该是` String fileRegex = "^([a-zA-Z\\-]))((\\d+)\\.(\\d+)\\.(\\d+)).jar ";` -
您在正则表达式中写了
)而不是]似乎有一个错字,并且您的字符类未关闭。尝试使用这个^([a-zA-Z\\-])((\\d+)\\.(\\d+)\\.(\\d+)).jar -
感谢@PushpeshKumarRajwanshi (+1) 摆脱了编译器错误,但我的所有示例仍然无法匹配(例如,
someLib-1.2.3.jar在matcher.matches("someLib-1.2.3.jar")上解析为 false 等。 -
@hotmeatballsoup:您的正则表达式中还有一些问题。让我通过一个答案来澄清一下。
-
"([a-zA-Z\\-]+)-(\\d+\\.\\d+\\.\\d+).jar"
标签: regex string java-8 semantic-versioning