JAVA高級編程基礎自學筆記---正則表達式(常用符號死背)

教學視頻: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%拿下。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章