Java 正則表達式詳解
序言:前兩天閑來無事,想起來好久都沒回去過學校了(Lz還是個沒畢業的孩子>_<)而且早就聽說學校新蓋的圖書館很高大上,所以就想著去泡泡圖書館,裝裝逼什么的。
隨手一拍,朦朧美
后來走著走著,就看到了IT類的資料,然后就順便翻了幾本看看,然后就看到了Java的正則表達式,因為之前項目中很多地方有用到正則的地方,但是每次都是去網上copy人家的,所以就想著得把這一塊好好弄懂,以后自己寫正則。以下是自己看完書之后的一些見解,如果有更正確的理解,還請留下你的評論
1、什么是正則表達式?
正則表達式的定義:這是一種字符串的語法規則,是一種可以用于模式匹配和替換的規則,主要用于文本和字符串的處理(匹配,查找,替換,判斷字符串)。一個正則表達式是由普通的字符(a~z)以及特殊字符(元字符)組成的文字模式,用以描述在查找文字主體時待匹配的一個或多個字符串。下面我們會介紹一些常用的元字符
2、正則表達式的元字符
元字符的定義:元字符:元字符使得正則表達式具有處理能力,指的是那些在正則表達式中具有特殊意義的專用字符,可以規定其前導字符在目標對象中的出現模式
元字符 | 在正則表達式中的寫法 | 意義 |
---|---|---|
. | . | 任何一個字符 |
\d | \\d | 0-9之間的任意一個數字 |
\D | \\D | 任何一個非數字字符 |
\s | \\s | 空格類字符'\t','\n'等等 |
\S | \\S | 非空格類字符 |
\w | \\w | 可用于標識符的字符,不包括美元符 |
\W | \\W | 不能可用于標識符的字符 |
\p{Lower} | \\p[Lower] | 小寫字母[a~z] |
\p{Upper} | \\p{Upper} | 大寫字母[A~Z] |
\p{ASCII} | \\p{ACSII} | ASCII字符 |
\p{Alpha} | \\p{Alpha} | 字母 |
\p{digit} | \\p{digit} | 數字字符[0~9] |
\p{Alnum} | \\p{Alnum} | 字母或數字 |
\p{Punct} | \\p{Punct} | 標點符號 |
\p{graph} | \\p{graph} | 可視字符,\p{Alnum},\p{Punct} |
\p{Print} | \\p{Print} | 可打印字符 |
\p{Blank} | \\p{Blank} | 空格或制表符 |
\p{Cntrl} | \\p{Cntrl} | 控制字符[\x00~\x1F\x7F] |
上面的表中,基本上就是一些比較常用的元字符,我們需要注意元字符在正則表達式中的寫法,不能直接用元字符來編寫我們的正則程序
3、正則表達式中的方括號[]
元字符可以是放在[]中的任意單個字符(如[a]表示匹配單個小寫字符a),也可以是字符序列(如[a-d]表示匹配a-d即a,b,c,d中的任意一個字符,而\w表示任意英文字母、數字及下劃線)。例如:regex="[159]ABC",那么"1ABC","5ABC","9ABC"都是與正則表達式regex匹配的字符,方括號的含義如下:
注:方括號內允許嵌套,可以進行交,并,差運算
方括號表達式 | 含義 |
---|---|
[abcde] | 匹配a,b,c,d,e中的任意一個字符 |
[a-h] | 匹配a到h之間的任意一個字符 |
[^fgh] | 匹配除f,g,h外的任意一個字符 |
[a-d[m-p]] | 代表a~d,或m~p中的任意一個字符(并) |
[a-z&&[def]] | 代表d,e或f中的任意一個字符串(交) |
[a-z&&[^bc]] | 代表a,d,e,f(差) |
4、正則表達式中的限定符
在使用正則表達式時,我們知道元字符一般只能匹配一個位置或一個字符,如果需要某一類型的元字符多次輸入,逐個輸入,或是要匹配多個字符的時候就相當麻煩,這個時候我們可以使用正則表達式的限定符來重復輸入。例如:regex="hello[246]?",那么"hello","hello2","hello4","hello6"都是與regex匹配的字符串,下面是一些常見的限定符
帶限定符號的模式 | 含義 |
---|---|
X? | X出現0次或1次 |
X* | X出現0次或多次 |
X+ | X出現1次或多次 |
X{n} | X出現n次 |
X{n,} | X至少出現n次 |
X{n,m} | X至少出現n至m次 |
XY | X后面跟Y |
X|Y | X或Y |
然后用法的話相信大家不會陌生吧:
String regex="自己定義的正則表達式";
String test="需要正則的字符串對象";
boolean isMatch=test.matches(regex);
if(isMatch){
//test為匹配成功的數據
}else{
//test為匹配失敗的數據
}
可能有些人會說,我經常用到的正則表達式中有 Pattern 和 Matcher 兩個類,這兩個類是干嘛的呢?
Pattern: 一個 Pattern 是一個正則表達式經編譯后的表現模式。
Matcher: 一個 Matcher 對象是一個狀態機器,它依據Pattern對象做為匹配模式對字符串展開匹配檢查。
首先一個 Pattern 實例訂制了一個所用語法與 PERL 的類似的正則表達式經編譯后的模式,然后一個 Matcher 實例在這個給定的 Pattern 實例的模式控制下進行字符串的匹配工作。
好了,上述就是前兩天啃書所獲得的經驗值,不得不說書還是個非常好的東西。
這是我建的一個android小白的群,各位有興趣的小白歡迎加群共同學習,也歡迎各位大神進群指導,共勉。群號:541144061
來自:http://www.jianshu.com/p/e55a6fec4c5c