正則
一、理論
所有的開發中百分百都會使用,不會用複雜的,一般幾種情況下使用:驗證、拆分、替換;
理論很簡單,這裡都懶得說了,也沒有什麼好說的,正則比較普通方法用起來快,比較簡化。
二、記憶:
正則是在java1.4版本加入的,最早起源于liunx的,在java中是通過apache下載下傳相關的正則開發包才可以完成,也就是java.util.regex(這個就是正則的jar包),其中包裡含有兩大類:1.pattern;2.Matcher;這兩個類幾乎不使用,我們隻需記下以下常用的即可:
常用(記)
1.字元(如果不加入量詞,表示單個字元)
如:
a:表示由指定的字母a組成;(同理其他字母也可以)

輸出為trun,若是str=“ab”,輸出就為false了,除非str.matches(“ab”)輸出才是true;
\\:比對一個“\”,也就是轉移字元
這會報錯,兩個\\就是一個\
\t:比對“\t”轉義字元
\n:比對換行的轉義字元
2.字元範圍(如果不加入量詞,表示單個字元)
如:
[abc]:表示字母中含有a、b、c其中任一位字母即可,大寫不行。(也可以寫其他)
[^abc]:取反[abc]的(反義詞),表示不是字母中含有a、b、c其中任一位字母
[a-zA-Z]:表示任一位字母(大寫或小寫)組成,如果[a-z],這樣就不能是大寫
[^a-zA-Z]:取反[a-zA-Z]的(反義詞)
3.簡化表達式
. :表示任意一位字元(注意,代碼裡不能直接寫.,要加\,如: \.)
注意:以下的兩個\表示一個\
\d :表示任意一位數字,等價于[0-9], 例如(差不多)
這樣是true,要是str=“a”,就是false了
\D :取反(\d)的反義詞,表示任意一位非數字,等有價于[^0-9],
\w :表示任意一位字元,由字元、數字、_組成,等價于[a-zA-Z_];(不包含 . )
\W :取反(\w)的反義詞,等價于[^a-zA-Z_],如str=“$”,這個是true
\s :表示任一空格,可能是\n或\t
\S :取反(\s)的反義詞,表示非空格
4.邊界比對(一般java很少用,javaScript會用到)
如:
^ :表示正則比對的開始(java不用)
$ :表示正則比對的結束
5.量詞描述:如果沒有量詞,那麼每一個出現的正則都隻能比對一個字元;
表達式?:表示此正規表達式可以出現0次或1次;
str=“”或“1”都是true,如果是=“11”就是false
表達式+ :表示此正規表達式可以出現1次或多次;
str=“1”或“111”都是true,如果是=“”就是false
表達式* :表示此正規表達式可以出現0次、1次或多次;
表達式{n} :表示此正規表達式可以出現n次,包含n次
表達式{n,m} :表示此正規表達式可以出現n到m次
6.邏輯運算
如:
X正則Y正則:表示X正則之後緊跟着驗證Y正則;
X正則 | Y正則:表示兩個正則選一個;
() :表示一組正則;
三、String對正則的支援(範例欣賞)
範例:進行替換
要求把非字母拆掉
輸出:
正則的原理就是離散型數學,我也沒有學會。
範例:進行拆分
按照數字拆分,有些說寫[0-9]
可是結果:
是以要這麼寫:
//一般不會這麼寫,應該是:
結果是:
對于替換和拆分使用正則并不麻煩,最麻煩的是進行字元串的結構驗證;
範例:判斷某一個字元串是否是消失,如果是則将其轉換為Double類型
比如:str = “10.2”
這裡要進行拆分分析,一般大家都會這麼拆分的
代碼如下,輸出是10.2沒錯:
若是寫str="10.?imageView2/2/w/1620",這個支援這種文法也沒錯,但是這種寫法不合理(數學沒有這種寫法,最少後面跟着小數位),按照上面的代碼,“10.”這樣的格式不會報錯,還是true,是以我們不能這麼寫;
小數點和2是什麼關系,有小數點才會有小數位
是以要這麼分析,加個括号
代碼如下:
這種情況,運作結果就會是false了。
隻有小數點跟小數位同時出現,比如str="10.1?imageView2/2/w/1620",這時候才是true
範例:比對日期
如果想要将字元串變成日期則一定要使用SimpleDateFormat程式類,但是這個類需要滿足特定的程式要求
輸出:
範例:比對電話号碼
老規矩,寫代碼前先分析,第一種,電話号碼一般是七位到八位,是以
代碼就出來了:
輸出:
第二種形式,前面010和-看成一體:
代碼也簡單出來了:
第三種形式分析如下,注意這裡括号和\\太多别搞錯:
代碼如下,誰看着不暈?是以一下子直接寫完不可能,要先分析,慢慢寫
輸出也是true
正則驗證email是相當好用
範例:驗證email位址
1.簡單驗證,email由字母、數字、_組成,例如:[email protected]
我們先分析:
是以代碼如下:
2.完整驗證:在email的使用者名可以由字母、數字、_、-、.組成和長度最大數量6-30位,其中要求以字母開頭,域名字尾隻能是:
例如:
先分析,其中{5,29}是因為首字母占了一個,減1即可,還有com判斷記得加的括号()是這個,不能是中括号
代碼如下:
六、java.util.regex包中的直接操作(這個不作為重點)
拆分例子:
輸出:
以上操作String也存在此方法,是以這裡我們一般不用Pattern類
Matcher類主要是進行比對
Matcher主要是取得執行個體化對象:
在Matcher類由如下方法:
1.字元串比對:
2.字元串替換:
範例:比對操作
輸出,感覺不如String友善:
隻有在複雜操作才用到此方法,比如分組操作,一般用不到。
Pattern和matcher這兩個類主要功能都在String中提供了支援,是以大部分情況下不考慮使用這兩個類。
總結:
正規表達式提供了更為強大的字元串驗證與操作的功能,對于正則操作常用标記必須記熟,什麼語言都有正則,雖然調用形式不同,但是标準正則支援是完全一樣的。