我目前遇到了解析类似版本的字符串的困难。
我的正则表达式是 v(\\d+)_(\\d+)(?:_(\\d+))?
,它应该匹配以下格式的字符串:vVersion_InterimVersion_PatchVersion。我的目标是,最后一个匹配组(_PatchVersion)是可选的。
我的问题在于可选部分。一个字符串 v1_00
将给我一个 matcher.groupCount
为3。我本来期望的是2个组。所以我猜我的正则表达式可能有误,或者我不理解 matcher.groupCount
。
public static void main(final String[] args) {
final String versionString = "v1_00";
final String regex = "v(\\d+)_(\\d+)(?:_(\\d+))?";
final Matcher matcher = Pattern.compile(regex).matcher(apiVersionString);
if (matcher.matches()) {
final int version = Integer.parseInt(matcher.group(1));
final int interimVersion = Integer.parseInt(matcher.group(2));
int patchVersion = 0;
if (matcher.groupCount() == 3) {
patchVersion = Integer.parseInt(matcher.group(3));
}
// ...
}
}
groupCount
实际上是Pattern
的状态,而不是Matcher
的状态,并且主要用于使用类似于索引集合的匹配器的东西中。 - M. Prokhorov