是一個字符串,使用單個字符串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字符串。在開發中,正則表達式一般被用來檢索、替換那些符合某個規則的文本。java
參照幫助文檔,在jdk中:java.util.regex.Pattern類中有正則表達式的的規則定義,正則表達式中明確區分大小寫字母。咱們來學習語法規則。正則表達式
字符:x函數
含義:表明的是字符x學習
例如:匹配規則爲 "a",那麼須要匹配的字符串內容就是 」a」 編碼
字符:\\spa
含義:表明的是反斜線字符'\'code
例如:匹配規則爲"\\" ,那麼須要匹配的字符串內容就是 」\」xml
字符:\tblog
含義:製表符ip
例如:匹配規則爲"\t" ,那麼對應的效果就是產生一個製表符的空間
字符:\n
含義:換行符
例如:匹配規則爲"\n",那麼對應的效果就是換行,光標在原有位置的下一行
字符:\r
含義:回車符
例如:匹配規則爲"\r" ,那麼對應的效果就是回車後的效果,光標來到下一行行首
字符類:[abc]
含義:表明的是字符a、b 或 c
例如:匹配規則爲"[abc]" ,那麼須要匹配的內容就是字符a,或者字符b,或字符c的一個
字符類:[^abc]
含義:表明的是除了 a、b 或 c之外的任何字符
例如:匹配規則爲"[^abc]",那麼須要匹配的內容就是否是字符a,或者不是字符b,或不是字符c的任意一個字符
字符類:[a-zA-Z]
含義:表明的是a 到 z 或 A 到 Z,兩頭的字母包括在內
例如:匹配規則爲"[a-zA-Z]",那麼須要匹配的是一個大寫或者小寫字母
字符類:[0-9]
含義:表明的是 0到9數字,兩頭的數字包括在內
例如:匹配規則爲"[0-9]",那麼須要匹配的是一個數字
字符類:[a-zA-Z_0-9]
含義:表明的字母或者數字或者下劃線(即單詞字符)
例如:匹配規則爲" [a-zA-Z_0-9] ",那麼須要匹配的是一個字母或者是一個數字或一個下滑線
預約義字符類:.
含義:表明的是任何字符
例如:匹配規則爲" . ",那麼須要匹配的是一個任意字符。若是,就想使用 . 的話,使用匹配規則"\\."來實現
預約義字符類:\d
含義:表明的是 0到9數字,兩頭的數字包括在內,至關於[0-9]
例如:匹配規則爲"\d ",那麼須要匹配的是一個數字
預約義字符類:\w
含義:表明的字母或者數字或者下劃線(即單詞字符),至關於[a-zA-Z_0-9]
例如:匹配規則爲"\w ",,那麼須要匹配的是一個字母或者是一個數字或一個下滑線
邊界匹配器:^
含義:表明的是行的開頭
例如:匹配規則爲^[abc][0-9]$ ,那麼須要匹配的內容從[abc]這個位置開始, 至關於左雙引號
邊界匹配器:$
含義:表明的是行的結尾
例如:匹配規則爲^[abc][0-9]$ ,那麼須要匹配的內容以[0-9]這個結束, 至關於右雙引號
邊界匹配器:\b
含義:表明的是單詞邊界
例如:匹配規則爲"\b[abc]\b" ,那麼表明的是字母a或b或c的左右兩邊須要的是非單詞字符([a-zA-Z_0-9])
數量詞:X?
含義:表明的是X出現一次或一次也沒有
例如:匹配規則爲"a?",那麼須要匹配的內容是一個字符a,或者一個a都沒有
數量詞:X*
含義:表明的是X出現零次或屢次
例如:匹配規則爲"a*" ,那麼須要匹配的內容是多個字符a,或者一個a都沒有
數量詞:X+
含義:表明的是X出現一次或屢次
例如:匹配規則爲"a+",那麼須要匹配的內容是多個字符a,或者一個a
數量詞:X{n}
含義:表明的是X出現剛好 n 次
例如:匹配規則爲"a{5}",那麼須要匹配的內容是5個字符a
數量詞:X{n,}
含義:表明的是X出現至少 n 次
例如:匹配規則爲"a{5, }",那麼須要匹配的內容是最少有5個字符a
數量詞:X{n,m}
含義:表明的是X出現至少 n 次,可是不超過 m 次
例如:匹配規則爲"a{5,8}",那麼須要匹配的內容是有5個字符a 到 8個字符a之間
①:請寫出知足以下匹配規則的字符串:
規則:"[0-9]{6,12}"
解釋:該規則須要匹配的內容是:長度爲6位到12位的數字。
示例:使用數據"123456789"進行匹配結果爲true;
使用數據"12345"進行匹配結果爲false。
規則:"1[34578][0-9]{9}"
解釋:該規則須要匹配的內容是:11位的手機號碼,第1位爲1,第2位爲3、4、5、7、8中的一個,後面9位爲0到9之間的任意數字。
示例:使用數據"12345678901"進行匹配結果爲false;
使用數據"13312345678"進行匹配結果爲true。
規則:"a*b"
解釋:該規則須要匹配的內容是:在多個a或零個a後面有個b;b必須爲最後一個字符。
示例:使用數據"aaaaab"進行匹配結果爲true;
使用數據"abc"進行匹配結果爲false。
規則:
匹配正整數:」\\d+」
匹配正小數:」\\d+\\.\\d+」
匹配負整數:」-\\d+」
匹配負小數:」-\\d+\\.\\d+」
匹配保留兩位小數的正數:」\\d+\\.\\d{2}」
匹配保留1-3位小數的正數:」\\d+\\.\\d{1,3}」
解釋:匹配正確的數字
規則:」[a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+\\w+@\\w+(\\.\\w+)+」
解釋:匹配合法的郵箱
代碼示例:
1 /** 2 * matches(String regex):判斷字符串是否匹配給定的規則 3 * 校驗qq號碼.規則:[1-9][0-9]{4,14} 4 * 1: 要求必須是5-15位數字 5 * 2: 0不能開頭 6 */ 7 public void matchesTest(){ 8 String qq = "604154942"; 9 String regex = "[1-9][0-9]{4,14}"; 10 boolean flag = qq.matches(regex); 11 }
1 /** 2 * split(String regex):根據給定正則表達式的匹配規則,拆分此字符串 3 * 分割出字符串中的的數字:_ 4 * 經過"_"拆分 5 */ 6 public void splitTest01(){ 7 String s = "18-22-40-65"; 8 String regex = "-"; 9 String[] result = s.split(regex); 10 System.out.println(result);//[18,22,40,65]15 } 16 /** 17 * 按空格分割出字符串中的的數字: + 18 * 18 22 40 65 19 * 注意:當有多個空格的時候,正則條件不能單純的寫成「 」(空格),這樣只會匹配一個空格,切出來的數據不符合咱們要求, 20 * 要寫成「 +」("空格+"),+表示匹配一個或多個 21 */ 22 public void splitTest02(){ 23 String s = "18 22 40 65"; 24 String regex = " +"; 25 String[] result = s.split(regex); 26 System.out.println(result);//[18,22,40,65] 27 }
1 /** 2 * 切IP地址:「\\.」 3 */ 4 public void splitTest03(){ 5 Spring ip = "127.0.0.1"; 6 // "."在正則中有特殊含義,經過轉譯符"\"將其轉譯 7 Spring regex = "\\."; 8 Spring[] result = ip.split(regex); 9 }
1 /** 2 * replaceAll(String regex,String replacement):將符合規則的字符串內容,所有替換爲新字符串 3 * 將數字替換成#號 4 */ 5 public void replaceAllTest01(){ 6 String s = "Hello12345World6789012"; 7 // "\\d"匹配的是一個位置是否爲數字 8 String regex = "[\\d]"; 9 String result = s.replaceAll(regex, "#"); 10 System.out.println(result); // 結果是:Hello#####World####### 11 } 12 /** 13 * 將數字替換成一個#號 14 */ 15 public void replaceAllTest02(){ 16 String s = "Hello12345World6789012"; 17 // "\\d"匹配的是一個位置是否爲數字,+表示一個或多個,注意+不能寫[]裏面 18 String regex = "[\\d]+"; 19 String result = s.replaceAll(regex, "#"); 20 System.out.println(result); // 結果是:Hello#World#