Java 正則表達式詳解

jo4353 8年前發布 | 8K 次閱讀 正則表達式 Java 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為匹配失敗的數據
}

可能有些人會說,我經常用到的正則表達式中有 PatternMatcher 兩個類,這兩個類是干嘛的呢?

Pattern: 一個 Pattern 是一個正則表達式經編譯后的表現模式。

Matcher: 一個 Matcher 對象是一個狀態機器,它依據Pattern對象做為匹配模式對字符串展開匹配檢查。

首先一個 Pattern 實例訂制了一個所用語法與 PERL 的類似的正則表達式經編譯后的模式,然后一個 Matcher 實例在這個給定的 Pattern 實例的模式控制下進行字符串的匹配工作。

好了,上述就是前兩天啃書所獲得的經驗值,不得不說書還是個非常好的東西。

這是我建的一個android小白的群,各位有興趣的小白歡迎加群共同學習,也歡迎各位大神進群指導,共勉。群號:541144061

 

來自:http://www.jianshu.com/p/e55a6fec4c5c

 

 本文由用戶 jo4353 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!