177 正則表達式
- 常用的正則標記
- 掌握String類對正則的支持
3.1問題的引出。
爲了更好的說明正則應用,下面要求編寫一個程序,判斷一個程序是否由數字組成。
實現原理:
將字符串變成字符數組,然後判斷每一個字符是否在“0-9的範圍之間”
範列:實現字符串的判斷
package java8Demo8; public class TestDemo { public static void main(String []args){ String str = "123"; System.out.println(isNumber(str)); } public static boolean isNumber(String temp){ char date[] = temp.toCharArray();//將字符串變成字符數組,目的是取去循環 for(int x=0 ; x < date.length ; x++){ if(date[x] >'9' || date[x] <'0'){ return false; } } return true; } }
|
此時判斷字符串是否由數字所組成,是一個很容易實現的功能,但是就這樣一個簡單的操作卻寫出了8行代碼,那麼說現在是更加複雜的操作呢?
範例:更加簡單的做法
package java8Demo8; public class TestDemo { public static void main(String []args){ String str = "123"; System.out.println(str.matches("\\d+")); } }
|
一個寫了很多行的代碼,最後只是寫了一行簡單的操作就實現了,而其中出現的“\\d+”就是正則表達式。正則是從jdk1.4的時候正式引入到java中的工具類,所有正則支持的類,都定義在了java.util.regex包裏面。在jdk1.4之前,如果要想使用正則,則需要單獨下載正則表達式的開發包後纔可以使用,
在java.util.regex包裏面定義了2個主要的類
- Pattem類,此類對象如果要想取得必須使用compile()方法,方法的功能是編譯正則。
- Matcher類:通過Pattem類取得。
178 正則標記(死了都要會)
所用的正則可以使用的標記都在java.util.regex.Pattem類裏面定義了。
字符:表示由一位字符所組成: \t : 表示一個“\t 符號:” \n: 匹配換行(\n)符號: |
||
2 字符集(數量:1) [a,b,c] :表示可能是字符a,或者字符b,或者字符c中的任意一位。 [^a,b,c] 表示不是a,b,c中的任意一位 [a-z]:所有的小寫字母 [a-zA-Z]:表示任意一位字母,不區分大小寫 [0-9]:表示任意數字, |
||
3 簡化的字符表達式(數量:1) “ . ” :表示任意的一位字符 \d: 等價於” [0-9] ” 屬於簡化寫法 \\d \D: 等價於” [^0-9] ” 屬於簡化寫法 \\D \s: 表示任意的空白字符,列如:”\t” ,“ \n” \S: 表示任意的非空白字符,列如:”\t” ,“ \n” \w: 等價於[a-zA-Z_0-9] 表示由任意的字母,數字,_所組成 \W: 等價於[^a-zA-Z_0-9] 表示不是由任意的字母,數字,_所組成 |
||
4 邊界匹配(不要在java中使用, 在js中使用) ^: 表示整個正則的開始。 $: 正則的結束。 |
||
5 數量表達式 正則?:表示此正則可以出現0次或者1次。 正則+ :表示正則可以出現一次或一次以上。 demo
正則*:表示此正則可以出現 0次,一次,或者多次 正則{n} : 表示此正則正好出現N次。 正則{n,} : 表示此正則正好出現N次以上包含N次。 正則{n,m} : 表示此正則正好出現n-m次。 demo
|
||
6 邏輯運算: 正則1 正則2 :正則1判斷完成之後繼續判斷正則2。 正則1 | 正則2 : 正則1或者是正則2有一組滿足即可。 (正則): 將多個正則作爲一組,可以爲這一組單獨設置出現的次數 |
179 正則表達式 String 類對正則的支持(重點)
在jdk1.4之後,由於正則的引入 所以String 類裏面也相應的增加了新的操作方法支持
方法名稱 |
類型 |
描述 |
Public boolean matches(String regex) |
普通 |
正則驗證,使用指定的字符串判斷是否符合給去的正則表達式結構 |
Public String replaceall(String regex, String replacement ) |
普通 |
全部替換 |
Public String replaceFirst(String regex, String replcement ) |
普通 |
替換首個 |
Public String[] split(String regex) |
普通 |
全部拆分 |
Public String[] split(String regex , int limit) |
普通 |
部分拆分 |
以上的幾個方法裏面,對於替換和拆分實際上難度不高,最關鍵的是正則的一個匹配,在驗證上使用的特別多。
範列:實現字符串的替換
package java8Demo8; public class TestDemo { public static void main(String []args){ //保留str中所有的小寫字母 String str = "wokundskflKKJKD()DSKsk*5"; String regex="[^a-z]";//此處定義正則 //將不是小寫字母用“”替換 System.out.println(str.replaceAll(regex, "")); //wokundskflsk } } |
範列:字符串拆分
package java8Demo8; public class TestDemo { public static void main(String []args){ //保留str中所有的數字剔除 String str = "11aa22bbcc33dd44ss22"; String regex="[\\d+]";//[0-9]此處定義正則 String result [] = str.split(regex); String temp=""; for(int x = 0; x < result.length ; x ++){ System.out.println(result[x]); temp+=result[x]; } System.out.println(temp);//aabbccddss } }
|
所有正則中最應該引起我們興奮的事情是因爲可以使用它進行驗證。
範列:判斷電話號碼,一般要編寫電話號碼一下幾種格式都是滿足的:
格式一:51283346,一般長度是7~8位的數字是電話號碼;(\\d{7,8}); 格式二:010-51283346,區號一般是3~4位,而且區號和電話之間的“-”只有在出現區號的時候纔出現;(\\d{3,4}-)?\\d{7,8} 格式三:(010)-51283346
package java8Demo8; public class TestDemo { public static void main(String []args){ String str="(010)-51283346"; String regex="((\\d{3,4}-)|(\\(\\d{3,4}\\)-))?\\d{7,8}"; System.out.println(str.matches(regex)); } }
|