天天看點

Java正規表達式學習筆記正則

正則

一、理論

所有的開發中百分百都會使用,不會用複雜的,一般幾種情況下使用:驗證、拆分、替換;

理論很簡單,這裡都懶得說了,也沒有什麼好說的,正則比較普通方法用起來快,比較簡化。

二、記憶:

正則是在java1.4版本加入的,最早起源于liunx的,在java中是通過apache下載下傳相關的正則開發包才可以完成,也就是java.util.regex(這個就是正則的jar包),其中包裡含有兩大類:1.pattern;2.Matcher;這兩個類幾乎不使用,我們隻需記下以下常用的即可:

常用(記)

1.字元(如果不加入量詞,表示單個字元)

如:

a:表示由指定的字母a組成;(同理其他字母也可以)

Java正規表達式學習筆記正則

輸出為trun,若是str=“ab”,輸出就為false了,除非str.matches(“ab”)輸出才是true;

\\:比對一個“\”,也就是轉移字元

Java正規表達式學習筆記正則

這會報錯,兩個\\就是一個\

\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], 例如(差不多)

Java正規表達式學習筆記正則

這樣是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.量詞描述:如果沒有量詞,那麼每一個出現的正則都隻能比對一個字元;

Java正規表達式學習筆記正則

表達式?:表示此正規表達式可以出現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對正則的支援(範例欣賞)

Java正規表達式學習筆記正則
Java正規表達式學習筆記正則

範例:進行替換

要求把非字母拆掉

Java正規表達式學習筆記正則

輸出:

Java正規表達式學習筆記正則

正則的原理就是離散型數學,我也沒有學會。

範例:進行拆分

按照數字拆分,有些說寫[0-9]

Java正規表達式學習筆記正則

可是結果:

Java正規表達式學習筆記正則

是以要這麼寫:

Java正規表達式學習筆記正則

//一般不會這麼寫,應該是:

Java正規表達式學習筆記正則

結果是:

Java正規表達式學習筆記正則

對于替換和拆分使用正則并不麻煩,最麻煩的是進行字元串的結構驗證;

範例:判斷某一個字元串是否是消失,如果是則将其轉換為Double類型

比如:str = “10.2”

這裡要進行拆分分析,一般大家都會這麼拆分的

Java正規表達式學習筆記正則

代碼如下,輸出是10.2沒錯:

Java正規表達式學習筆記正則

若是寫str="10.?imageView2/2/w/1620",這個支援這種文法也沒錯,但是這種寫法不合理(數學沒有這種寫法,最少後面跟着小數位),按照上面的代碼,“10.”這樣的格式不會報錯,還是true,是以我們不能這麼寫;

小數點和2是什麼關系,有小數點才會有小數位

是以要這麼分析,加個括号

Java正規表達式學習筆記正則

代碼如下:

Java正規表達式學習筆記正則

這種情況,運作結果就會是false了。

Java正規表達式學習筆記正則

隻有小數點跟小數位同時出現,比如str="10.1?imageView2/2/w/1620",這時候才是true

範例:比對日期

如果想要将字元串變成日期則一定要使用SimpleDateFormat程式類,但是這個類需要滿足特定的程式要求

Java正規表達式學習筆記正則

輸出:

Java正規表達式學習筆記正則

範例:比對電話号碼

Java正規表達式學習筆記正則

老規矩,寫代碼前先分析,第一種,電話号碼一般是七位到八位,是以

Java正規表達式學習筆記正則

代碼就出來了:

Java正規表達式學習筆記正則

輸出:

Java正規表達式學習筆記正則

第二種形式,前面010和-看成一體:

Java正規表達式學習筆記正則

代碼也簡單出來了:

Java正規表達式學習筆記正則

第三種形式分析如下,注意這裡括号和\\太多别搞錯:

Java正規表達式學習筆記正則

代碼如下,誰看着不暈?是以一下子直接寫完不可能,要先分析,慢慢寫

Java正規表達式學習筆記正則

輸出也是true

正則驗證email是相當好用

範例:驗證email位址

1.簡單驗證,email由字母、數字、_組成,例如:[email protected]

我們先分析:

Java正規表達式學習筆記正則

是以代碼如下:

Java正規表達式學習筆記正則

2.完整驗證:在email的使用者名可以由字母、數字、_、-、.組成和長度最大數量6-30位,其中要求以字母開頭,域名字尾隻能是:

Java正規表達式學習筆記正則

例如:

Java正規表達式學習筆記正則

先分析,其中{5,29}是因為首字母占了一個,減1即可,還有com判斷記得加的括号()是這個,不能是中括号

Java正規表達式學習筆記正則

代碼如下:

Java正規表達式學習筆記正則

六、java.util.regex包中的直接操作(這個不作為重點)

Java正規表達式學習筆記正則

拆分例子:

Java正規表達式學習筆記正則

輸出:

Java正規表達式學習筆記正則

以上操作String也存在此方法,是以這裡我們一般不用Pattern類

Matcher類主要是進行比對

Matcher主要是取得執行個體化對象:

Java正規表達式學習筆記正則

在Matcher類由如下方法:

1.字元串比對:

Java正規表達式學習筆記正則

2.字元串替換:

Java正規表達式學習筆記正則

範例:比對操作

Java正規表達式學習筆記正則

輸出,感覺不如String友善:

Java正規表達式學習筆記正則

隻有在複雜操作才用到此方法,比如分組操作,一般用不到。

Pattern和matcher這兩個類主要功能都在String中提供了支援,是以大部分情況下不考慮使用這兩個類。

總結:

正規表達式提供了更為強大的字元串驗證與操作的功能,對于正則操作常用标記必須記熟,什麼語言都有正則,雖然調用形式不同,但是标準正則支援是完全一樣的。