1. 程式人生 > >(Java)常用API(二)正則表示式

(Java)常用API(二)正則表示式

【正則表示式 Regular Expression】

        概念:一個字串,使用單個字串來描述、定義匹配規則,匹配一系列符合某個句法規則的字串。

        作用:常被用來檢索、替換那些符合某個規則的文字

【正則表示式匹配規則】

字元 含義 舉例
x 代表的是字元x 匹配規則為"a",那麼需要匹配的字串內容就是"a"
\\ 代表的是反斜線字元'\' 匹配規則為"\",那麼需要匹配的字串內容就是"\"
\t 製表符 匹配規則為"\t",對應的效果就是產生一個製表符空間
\n 換行符 匹配規則為"\n",換行,游標在原有位置的下一行
\r 回車 匹配規則為"\r",回車,游標回到下一行行首
字元類 含義 舉例
[abc] 代表的是a、b或c 匹配規則為"[abc]",需要匹配的內容就是abc中的任一個字元
[^abc] 代表的是除a、b或c意外的任何字元 匹配規則為"[^abc]",匹配的是除abc的任一個字元
[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的數字 匹配規則"\d",需要匹配的是一個數字
\w 代表的是數字或字母或下劃線 同[a-zA-Z_0-9]
邊界匹配器 含義 舉例
^ 代表的是行的開頭 匹配規則為^[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出現多次獲0次
x+ 代表x出現一次或多次
x{n} 代表x出現恰好n次
x{n,} 代表x出現至少n次
x{n,m} 代表 的是x出現至少n次,但不超過m次

【匹配正確的數字】 

匹配正整數 "\\d+"
匹配正小數 "\\d+\\.\\d+"
匹配負整數 "-\\d+"
匹配負小數 "-\\d+\\.\\d+"
匹配保留2位小數的正數 "\\d+\\.\\d{2}"
匹配保留1-3位小數的正數 "\\d+\\.\\d{1,3}"

【匹配合法郵箱】

匹配合法郵箱 "[a-zA-Z_0-9][email protected][a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+"
/*
 * 檢查郵箱地址是否合法
 *   [email protected]
 *   [email protected]
 *   [email protected]
 *   [email protected]
 * 規則:
 * 	 @:前  數字、字母、下劃線       個數不能少於1個
 *   @:後 數字字母                             個數不能少於1個
 *   .:後 字母
 */
public class Test3 {

	public static void main(String[] args) {
		checkMail();

	}
	public static void checkMail(){
		String email = "[email protected]";
		boolean b = email.matches("[0-9a-zA-Z_][email protected][0-9a-z]+(\\.[a-z]+)+");
		System.out.println(b);
	}

}

【matches舉例】

/*
 * 使用字串類的方法,實現正則規則和字串進行匹配
 * String類三個和正則表示式相關的方法
 * 1. boolean  matches(String 正則的規則)
 *    "abc".matches("[a]")  匹配成功返回true
 *    
 * 2.String[] split(String 正則表示式)
 *    "abc".split("a")   使用規則將字串進行切割
 *    
 * 3.String replaceAll(String 字串, String 正則規則)
 *    "abc0123".replaceAll("[\\d]", "#") 按照正則的規則,替換字串
 * 
 */
public class Test {
	public static void main(String[] args) {
		checkQQ();
		checkPhone();
	}
	
	/*1.檢查QQ號碼是否合法
	 *  0不能開頭,全數字,位數5-10位
	 *  \\d  相當於[0-9], 代表的是0到9的數字
	 *  \\D  匹配的不是數字
	 */
	public static void checkQQ(){
		String str = "123456";
		boolean b = str.matches("[1-9][0-9]{4,9}");
		System.out.println(b);
	}
	
	/*2.檢查手機號是否合法
	 * 開頭為1 第二位可以為34578,後面9位為0到9之間的任意數字
	 * 
	 */
	public static void checkPhone(){
		String pho = "18621061763";
		boolean b = pho.matches("1[34578][0-9]{9}");
		System.out.println(b);
	}
}

【split舉例】

public class Test1 {
	public static void main(String[] args) {
		//split_1();
		//split_2();
		split_3();
	}
	/*1.String類方法split對字元進行切割 
	 *   12-3-32-32  按照-進行切割
	 */
	public static void split_1(){
		String str = "12-3-32-32";
		//1.按照 - 對字串進行切割
		String[] arrstr = str.split("-");
		for(int i=0;i<arrstr.length;i++){
			System.out.println(arrstr[i]);   // 12 3  32  32
		}
	}
	/*2.String類方法split對字元進行切割 
	 *   12  3 32    32  按照 空格進行切割
	 */
	public static void split_2(){
		String str = "12  3 32    32 ";
		//2.按照 空格 對字串進行切割
		String[] arrstr = str.split(" +");   // " +"刪除一個或多個空格
		for(int i=0;i<arrstr.length;i++){
			System.out.println(arrstr[i]);   // 12 3  32  32
		}
	}
	/*3.String類方法split對字元進行切割 
	 *   192.168.105.27  按照 .進行切割
	 */
	public static void split_3(){
		String str = "192.168.105.27";
		//3.按照 . 對IP地址字串進行切割
		String[] arrstr = str.split("\\.");   
		for(int i=0;i<arrstr.length;i++){
			System.out.println(arrstr[i]);   // 192 168 105 27
		}
	}

}

【replaceAll舉例】

public class Test2 {
	public static void main(String[] args) {
		replace_1();
	}
	/*1.replaceAll(正則規則,替換後新的字串)
	 *   helle1234world7754  將其中的數字替換為#
	 */
	public static void replace_1(){
		String str = "helle1234world7754";
		//str = str.replaceAll("[\\d+]", "#");  // helle####world####
		str = str.replaceAll("[\\d]+", "#");    // helle#world#
		System.out.println(str);
	}

}