2 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
您的有效字符串以數(shù)字而不是字母開頭,因此[a-zA-Z-]+
在您的模式中已經(jīng)使模式錯(cuò)誤。
使用
^[1-9]\d*\.\d+\.\d+(?:-[a-zA-Z0-9]+)?$
請(qǐng)參閱正則表達(dá)式演示
細(xì)節(jié)
^
- 字符串的開頭[1-9]\d*
- 一個(gè)從1
到 的數(shù)字9
,然后是 0 個(gè)或多個(gè)數(shù)字\.\d+\.\d+
- 兩次出現(xiàn).
和 1+ 數(shù)字(可以寫成(?:\.\d+){2}
)(?:-[a-zA-Z0-9]+)?
- 可選出現(xiàn)-
和 1+ 個(gè)字母數(shù)字字符([a-zA-Z0-9]
可以寫為\p{Alnum}
)$
- 字符串末尾。
在 Java 中,與 一起使用.matches()
:
public boolean isSemVer(String version) {
Pattern versionPattern = Pattern.compile("[1-9]\\d*\\.\\d+\\.\\d+(?:-[a-zA-Z0-9]+)?");
Matcher matcher = versionPattern.matcher(version);
return matcher.matches();
}

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以嘗試使用官方SemVer 正則表達(dá)式
"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$"gm
添加回答
舉報(bào)