教學視頻:https://edu.51cto.com/course/5667.html?source=so
正則
一、理論
所有的開發中百分百都會使用,不會用複雜的,一般幾種情況下使用:驗證、拆分、替換;
理論很簡單,這裏都懶得說了,也沒有什麼好說的,正則比較普通方法用起來快,比較簡化。
二、記憶:
正則是在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.",這個支持這種語法也沒錯,但是這種寫法不合理(數學沒有這種寫法,最少後面跟着小數位),按照上面的代碼,“10.”這樣的格式不會報錯,還是true,所以我們不能這麼寫;
小數點和2是什麼關係,有小數點纔會有小數位
所以要這麼分析,加個括號
代碼如下:
這種情況,運行結果就會是false了。
只有小數點跟小數位同時出現,比如str="10.1",這時候纔是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中提供了支持,所以大部分情況下不考慮使用這兩個類。
總結:
正則表達式提供了更爲強大的字符串驗證與操作的功能,對於正則操作常用標記必須記熟,什麼語言都有正則,雖然調用形式不同,但是標準正則支持是完全一樣的。
100%拿下。