我正在撰寫一些正則運算式來查找可能通過聊天共享的系統密碼。
密碼要求如下:
- 12-24 個字符
- 字母數字
- 1 個特殊字符($ 或 #)
- 必須以字母開頭
我以為我想出了一個不錯的模式,但我的 RegEx 匹配了行中任何地方的規則:
\b(?=[\S] )(?=(?:[a-zA-z]))(?=(?:. \d))(?=(?:. [$#]))(?!=[\s]*)([A-Za-z\d$#]{12,24})
我認為我的界限使用不當,我做錯了什么?
this is RealPa$$word and it doesn't matter that the number is all the way here 1
this is RealPa$$word and it doesnt match because there is no number.
謝謝!
更新 這是我用來驗證的 Regexr 的鏈接。
https://regexr.com/6cep8
uj5u.com熱心網友回復:
你有一些多余的斷言和組。這(?=[\S] )會在右側斷言一個非空白字符,但模式末尾的字符類[A-Za-z\d$#]{12,24}與空格不匹配,因此您可以省略該空格。
此斷言(?!=[\s]*)也是不必要的,因為=字符類也無法匹配。
此外,僅對于匹配,您不需要捕獲組。
如果您在單詞邊界之后立即斷言[a-zA-z](注意應該是[a-zA-Z]),那么您也可以匹配它。
如果您不想匹配空格,則. 應該更具體而不匹配空格,例如匹配可選的非數字沒有空格然后匹配單個數字(?=[^\d\s]*\d)
如果你想擁有在合適的邊界,則\b是行不通的,因為是$和#在字符類。您可能會在右側斷言空白邊界,而不是獲得該[A-Za-z\d$#]{12,23}部分的部分匹配。
因為你可以匹配第一個[a-zA-Z]量詞可以{11,23}代替{12,24}
\b[a-zA-Z](?=[^\d\s]*\d)(?=[^\s$#]*[$#])[A-Za-z\d$#]{11,23}(?!\S)
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/398903.html
標籤:正则表达式
上一篇:替換R中字串末尾的點
