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