亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于檢測 semver 字符串的 Java 正則表達式在沒有限定符的情況下失敗

用于檢測 semver 字符串的 Java 正則表達式在沒有限定符的情況下失敗

慕仙森 2023-09-13 17:34:20
我正在嘗試獲取一個 Java 方法來驗證參數是否是格式String正確的“ semver ”(語義版本控制)版本字符串。在我的應用程序中,semver 字符串必須采用以下形式:<major>.<minor>.<patch>-<qualifier>在哪里:<major>是正整數 (1+)<minor>和<patch>都是非負整數 (0+)<qualifier>是一個字母數字字符串 ( ([0-9][a-z][A-Z])+)有效示例:1.2.401.0.0-SNAPSHOT2.0.45-RC3.10.0迄今為止我最好的嘗試:public boolean isSemVer(String version) {    Pattern versionPattern = Pattern.compile("^[a-zA-Z-]+\\d+\\.\\d+\\.\\d+");    Matcher matcher = versionPattern.matcher(version);    return matcher.matches();}生成false的第一個有效示例1.2.40。誰能告訴我哪里出了問題以及我需要在正則表達式中進行哪些調整才能讓它接受我的用例?提前致謝!
查看完整描述

2 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

您的有效字符串以數字而不是字母開頭,因此[a-zA-Z-]+在您的模式中已經使模式錯誤。

使用

^[1-9]\d*\.\d+\.\d+(?:-[a-zA-Z0-9]+)?$

請參閱正則表達式演示

細節

  • ^- 字符串的開頭

  • [1-9]\d*- 一個從1到 的數字9,然后是 0 個或多個數字

  • \.\d+\.\d+- 兩次出現.和 1+ 數字(可以寫成(?:\.\d+){2}

  • (?:-[a-zA-Z0-9]+)?- 可選出現-和 1+ 個字母數字字符([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();

}


查看完整回答
反對 回復 2023-09-13
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

您可以嘗試使用官方SemVer 正則表達式

"^(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



查看完整回答
反對 回復 2023-09-13
  • 2 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號