1. 程式人生 > >JAVA正則表示式小總結

JAVA正則表示式小總結

最近專案中正在做後臺校驗,而後臺校驗也基本都是使用正則表示式校驗,本文做一些粗略的總結。

1、字串長度:.{1,10},注意有一個點在{}前,表示匹配所有。‘{}’之前一定是一個捕獲組,因此如果有其他篩選要求並且限制長度則為在總捕獲組的最後加上{}來限制長度。

2、如何表示不為abcd的任意一個字元:([^abcd])*,使用^表示在[]不為[]內的任意字元;注意,常有人寫成([^a|b|c|d])*,[]裡邊的|不代表或者的意思,這裡指表示|這個字元本省。

3、如何表示字串中不含有adc或def等字串:((?!adc)(?!def).)* ,其中adc為且的關係;這裡有個小圓點的原因是:寫正則表示式需要記住的一個重要原則就是正則表示式都是基於位校驗的

,因此如果此處我們沒有小圓點來匹配位,這個正則表示式就是錯誤的。

4、如何表示多個限制條件:即多個限制條件且,使用多個捕獲組相連線即可,即使用多個()相連。如:如何保證字串中不存在adc、def且不存在雙引號、單引號、斜槓、尖括號等,且長度保證在40位以內:((?!adc)(?!def)([^\"'\\<])){0,40},就像之前說的{}之前需要一個大的括號來作為一個最終捕獲組;

5、如何匹配包含換行符等在內的特殊字元的所有字元:我之前寫的是這樣的:(.|//s){1,2000},但是有一天測試居然告訴我當他真的用2000個字元來驗證的時候,這個直接導致程式異常了,經過多方驗證原來這是jdk的一個bug,於是只能改用([//s//S]){1,2000},這裡使用一個小技巧,表示所有字元時用//s和//S代替,因為//s代表所有換行符 空格符等字元,而//S恰好有表示非換行符等,正好是一個互補關係。