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

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

字符串只能包含 [a-zA-Z0-9_] 符號(可以來自一個字母,但不能是“_”),不能從數字開始

字符串只能包含 [a-zA-Z0-9_] 符號(可以來自一個字母,但不能是“_”),不能從數字開始

隔江千里 2023-07-13 13:59:58
我正在解決 Java 中的一個問題,需要創建一個正則表達式,它檢查字符串中的下一個規則:字符串只能包含數字、大小寫字母和下劃線字符"_";字符串不能以數字開頭;如果字符串以下劃線開頭,則第二個字符不能是下劃線,即必須是數字或字母;該字符串只能由一個字符組成,但該字符不能是下劃線;我不明白如何制作正則表達式的第一部分。我嘗試將其部分部分地制作:表達式"_[a-zA-Z0-9]"滿足條件“如果字符串以下劃線字符開頭,則第二個字符是字母或數字”。表達式"\\D"滿足條件“字符串不得以數字開頭”。表達式"[a-zA-Z]"滿足條件“字符串以大寫或小寫字母開頭”。表達式的最后一部分很簡單—— "w*"。當我嘗試將所有這些放在一起時"(_[a-zA-Z0-9])*|(\\D)*|([a-zA-Z])*w*",獲得的正則表達式無法正常工作。以下字符串b33不_n1適合我的正則表達式,但該字符串__適合它。如何修復我的正則表達式?
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

您可以使用

^(?![0-9]|__|_$)[a-zA-Z0-9_]+$

或者,用簡寫:

^(?!\d|__|_$)\w+$

請參閱正則表達式演示

細節

  • ^- 字符串的開頭(隱含在.matches()

  • (?![0-9]|__|_$)- 之后不能有數字或__子字符串,或者_后面不能有字符串結尾

  • [a-zA-Z0-9_]+- 1+ ASCII 字母、數字或_*也用于匹配空字符串)

  • $- 字符串結尾(隱含在 中.matches())。

在 Java 中,使用它時.matches()省略錨點:

s.matches("(?!\\d|__|_$)\\w+")


查看完整回答
反對 回復 2023-07-13
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

盡管如此,我想提供一種僅部分使用正則表達式的替代方案。我經常也在網上搜索緊湊的正則表達式,并經常得到答案,但兩個月后我不知道該表達式的含義。


如果您不是像 Wiktor Stribi?ew 這樣的正則表達式天才,并且希望第一眼看到已驗證的內容,我建議您采用以下方法


static boolean check(String s){

    if(s.matches("[a-zA-Z0-9_]+")){

        if( !Character.isDigit(s.charAt(0))){

            if(!s.startsWith("__")){

                return !(s.length() == 1 && s.equals("_"));

            }

        }

    }

    return false;

}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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