這里記錄下盒蟆,我在初學時如何理解零寬斷言(初學時,沒人指導很容易想不明白)
1. 簡單的定義:一個<沒有寬度>位置捉兴,這個位置滿足一定條件<斷言>
2. 為了方便理解抡蛙,看下面例子:
正則<用于密碼設置>:^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$
說明:匹配8~20位由0-9A-Za-z構成的字符(必須包含數(shù)字和字母)
下面解釋步驟(index是int表示匹配的下標),從左到右:
^ 匹配開始(index = 0)
(?![0-9]+$) 這是一個負向零寬斷言,不能以<全是數(shù)字和結尾>構成結尾的字符莫其,從index=0往后匹配癞尚,像123456789這樣的就不合法了耸三,而像12345678a, abcdefg可以匹配
(?![a-zA-Z]+$) 這是一個負向零寬斷言,不能以<字符和結尾>構成結尾的字符浇揩,仍然從index=0往后匹配仪壮,零寬斷言的特點就是,匹配的位置不會被消費胳徽,index不會往后增加(滿足條件即可)
[0-9A-Za-z]{8,20} 如果已經(jīng)滿足前面兩個零寬斷言积锅,就說明從index=0開始到結束已經(jīng)滿足不全是(0-9),(a-zA-Z)的字符串了养盗,這下再匹配index=0開始到結尾8~20位0-9A-Za-z
$ 匹配結束