引子,之前學的正則大多都是比較死板的一個扣一個,有時候遇到難點的又是網上抄襲,很費事,費力。晚上無聊學習下正則。
首先看個例子,匹配一個密碼,但是必須有字母和數字,這是網上一個比較常見的案列;
/^(?=.*[0-9])(?=.*[a-z])[0-9A-Za-z]{6,12}$/
- 首先看?=這個代表什么,(?=exp)也叫零寬度正預測先行斷言,它斷言自身出現的位置的后面能匹配表達式exp。比如\b\w+(?=ing\b),匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.時,它會匹配sing和danc。這里引自《正則30分鍾入門那篇課程》,http://deerchao.net/tutorials/regex/regex.htm#more;
- 也就是說?=表示,他斷言他出現的位置能匹配后面的表達式,說直白一點,就是他這里做了限制,后面的的表達式必須符合標注。那這里做了什么限制了?
- 這個地方有點難以理解,對我來說。看個人吧。他不能匹配到字符,他是匹配了為位置,記住位置,$^這些都是在匹配位置;
- 完整的來講,我在開頭^緊跟着的位置,也可以理解就在開頭,我發話了,后面的表達式,都配合下我演出 內容是 .*[0-9]我匹配任意字符,但是后面你們一定要給我來個數字必須有


-
都說了必須有數字嘛,有了就行了。但是這個范圍其實很大,離你匹配的東西差距很遠,所以大規則下還有小規則;
- [0-9A-Za-z]{6,12}$這是小規則,在滿足大規則的前提下,我還具體約束一下。老大說了任意字符都匹配有字母和數字就行,但是我這里必須匹配字母數字,還有個數要求。這是具體匹配。來看個例子,
老大說了,要滿足他的條件,我想在后面加個.com看看行不行,形如這種格式
這樣是不行的老大匹配的是位置,滿足條件。你這是具體的東西啊,這里一定要理清位置,和具體字符的關系。.com是實際要匹配的。那怎樣才行了?

- 我現在寫的表達式滿足老大的意思了吧,

-
這樣就行了,前面的斷言要滿足,后面匹配實際的字符也要滿足,一旦有沖突,就會匹配不了。
