这个问题在这里已有答案:
我正在比较作为字符串提供的版本号。
我需要检测版本是否是测试版本,我想检查版本的最后部分是否包含beta版本,版本或b,我正在尝试使用正则表达式执行此操作。
到目前为止它可以工作,但只要版本部分中有空格,它就不会。
也许有人有更好的主意?
到目前为止我的正则表达式:
(\d+)(beta|build|b(\d*))?
字符串示例:
v1.23beta125 - >好的
v1.25.458 beta 129 - >无法识别
示例代码:
private Boolean getBeta(String str) {
boolean version = false;
Pattern p = Pattern.compile("(\\d+)(beta|build|b(\\d*))?");
Matcher m = p.matcher(str);
if (!m.find()) {
return version;
} else
version = true;
return version;
}
您还可以使用限制性更强的以下正则表达式:
v?\s*(\d+(\.\d*)*)+\s*(beta|build|b)\s*(\d+)
在regex101上测试:https://regex101.com/r/oLoVN3/2
你需要在每个反斜杠\
之前添加一个反斜杠\
,以便在你的代码中使用它。
您可以使用空格作为可选项(0或更多)
试试这个正则表达式:
(beta|build|b)\s*(\d+)
我的意思是,你想要的只是找到版本字符串中是否有b
,beta
或build
,对吧? contains
可以做到这一点。你不需要正则表达式:)
好吧,你也可以使用这个正则表达式
build|beta|b
检查find
是否返回true。
您可能还想打开不区分大小写的选项。