慕田峪9158850
2023-09-20 14:31:51
我需要我的正則表達式語句來執行以下操作:需要:az 0-多次,0-9 0-3次,& 0-多次,” “0-1次,至少 8 個字符。我還使用這個網站來測試我的代碼 - https://regexr.com。我的正則表達式:([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}這些應該有效:abcD &EFG,
ABCde f123,
&&12ADSD&&.這些不應該:a bcD &EFG,
AB5Cde f123,
&&12ADSD&&34,1234567,
nope.問題是我的正則表達式將接受任意數量的數字,無論我對其施加限制,并且它會接受單詞中間的空格,但不可預測,我不知道為什么。我是正則表達式的新手,所以請對我溫柔一些
2 回答

手掌心
TA貢獻1942條經驗 獲得超3個贊
當前模式的開頭([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}
有 0+ 次、0-3 次或可選的量詞。
最后它應該匹配至少 8 次以上的單詞字符,而這不會匹配任何示例。
您可以使用負前瞻(?!
來斷言沒有出現 4 個數字或 2 個空格,然后重復匹配字符類中列出的 8 次以上。
^(?!(?:[^\r\n0-9]*[0-9]){4})(?!(?:\S* ){2})[a-zA-Z0-9 &]{8,}$
^
字符串的開頭(?!
負向前看,斷言右邊的不是(?:[^\r\n0-9]*[0-9]){4}
匹配 4 次一個數字)
關閉前瞻(?!
負向前看,斷言右邊的不是\S*
匹配 0+ 次非空白字符,然后匹配一個空格(?:
非捕獲組){2}
關閉非捕獲組并重復2次)
負向前瞻,斷言不是 2 個空格[a-zA-Z0-9 &]{8,}
匹配任何列出的 8 次以上$
字符串結尾

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
與正向前瞻有些不同
Pattern.compile("(?=^[^ ]* ?[^ ]*$)(?=^([^0-9]*[0-9]?){1,3}$)^[A-Za-z0-9\\& ]{8,}$")
[a-zA-Z0-9\\& ]{8,}
:允許的字符數為 8 個或更多。
(?=^[^ ]* ?[^ ]*$)
:正向前瞻:允許單個空格
(?=^([^0-9]*[0-9]?){1,3}[^0-9]*$)
:正向前瞻最多允許三個數字實例
https://regex101.com/r/FvaslE/2
添加回答
舉報
0/150
提交
取消