常用類庫------15.13正則表達式

正則表達式

正則表達式最早是從UNIX系統的工具組件中發展而來的,在JDK 1.4以前如果需要使用到正則表達式的相關定義則需要單獨引入其它的*.jar文件,而從JDK 1.4之後,正則已經默認被JDK所支持,並且提供有java.util.regex開發包,同時針對於String類也進行了一些修改,使其可以有方法直接支持正則處理
範例:使用正則表達式

public class JavaAPIDemo358 {
       public static void main(String[] args) {
		String str="123";
		if(str.matches("\\d+")) {  //結構匹配   判斷是否爲多位數字
			int num=Integer.parseInt(str);//將字符串轉換爲int型數據類型
			System.out.println(num*2);
		}
	}
}

執行結果
2

15.13.1常用正則標記

java.util.regex.Pattern中
1、字符:匹配單個字符

  • a:表示匹配字母a;
  • \:匹配轉義字符“\”;
  • \t:匹配轉義字符“\t”;
  • \n:匹配轉義字符“\n”;

2、一組字符:任意匹配裏面的一個單個字符;

  • [abc]:表示可能是字母a,可能是字母b或者是字母c;
  • [^abc]:表示不是字母a、字母b、字母c的任意一個;
  • [a-zA-Z]:表示全部字母中的任意一個;
  • [0-9]:表示全部數字的任意一個;

3、邊界匹配:在以後編寫JavaScript的時候使用正則中要使用到;

  • ^:表示一組正則的開始;
  • $:表示一組正則的結束;
    4、簡寫表達式:每一位出現的簡寫標記也只表示一位;
  • .:表示任意的一位字符;
  • \d:表示任意的一位數字,等價於“[0-9]”;
  • \D:表示任意的一位非數字,等價於“[^0-9]”;
  • \w:表示任意的一位字母、數字、,等價於“[a-zA-Z0-9]”;
  • \W:表示任意的一位非字母、數字、,等價於“[^a-zA-Z0-9]”;
  • \s:表示任意的一位空格,例如:\n、\t等;
  • \S:表示任意的一位非空格;

5、數量表示:之前的所有正則都只是表示一位,如果要想表示多位,則就需要數量表示。

  • 正則表達式?:此正則出現0次或1次;
  • 正則表達式*:此正則出現0次、1次或多次;
  • 正則表達式+:此正則出現1次或多次;
  • 正則表達式{n}:此正則出現正好n次;
  • 正則表達式{n,}:此正則出現n次以上;
  • 正則表達式{n,m}:此正則出現n ~ m次。

6、邏輯表示:與、或、非

  • 正則表達式A正則表達式B:表達式A之後緊跟着表達式B;
  • 正則表達式A|正則表達式B:表示表達式A或者是表達式B,二者任選一個出現;
  • (正則表達式):將多個子表達式合成一個表示,作爲一組出現。

15.13.2String類對正則的支持

在這裏插入圖片描述
範例:實現字符串替換(刪除非字母與數字)

public class JavaAPIDemo360A {
       public static void main(String[] args) {
		String str="liliu@#$%";
		String regex="[^a-zA-Z0-9]+";
		System.out.println(str.replaceAll(regex, ""));
	}
}

執行結果

liliu

範例:實現字符串拆分

public class JavaAPIDemo360B {
      public static void main(String[] args) {
		String str="k555h4448h54f555r44k4";
		String regex="\\d+";
		String [] result=str.split(regex);
		for (int i = 0; i < result.length; i++) {
			System.out.print(result[i]+" ");
		}
	}
}

執行結果

k h h f r k 

範例:判斷一個數據是否爲小數,如果是小數則將其轉換double型


public class JavaAPIDemo361A {
      public static void main(String[] args) {
    	  String str = "100.1"; 	// 要判斷的數據內容
  		String regex = "\\d+(\\.\\d+)?"; 	// 正則表達式
  		if (str.matches(regex)) {	// 正則匹配成功
  			double num = Double.parseDouble(str) ; // 字符串轉double
  			System.out.println(num);	// 直接輸出
  		} else {
  			System.out.println("內容不是數字,無法轉型。");
  		}

	}
}

執行結果

100.1

範例:判斷一個字符串是否由日期所組成,如果是由日期所組成則將其轉爲Date類型

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class JavaAPIDemo361B {
       public static void main(String[] args) throws ParseException {
		String str="1998-06-14";
		String regex="\\d{4}-\\d{2}-\\d{2}";
		if(str.matches(regex)) {
			System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));
			
		}
	}
}

執行結果

Sun Jun 14 00:00:00 CST 1998

範例:判斷電話號碼格式是否正確
在本程序中電話號碼的內容有如下三種類型:

  • 電話號碼類型一(7 ~ 8位數字):51283346(判斷正則:“\d{7,8}”);
  • 電話號碼類型二(在電話號碼前追加區號):01051283346(判斷正則:“(\d{3,4})?\d{7,8}”);
  • 電話號碼類型三(區號單獨包裹):(010)-51283346(判斷正則:“((\d{3,4})|(\(\d{3,4}\)-))?\d{7,8}”);
public class JavaAPIDemo361C {
       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));// 正則匹配

	}
}

執行結果
true
範例:驗證Email格式
現在要求一個合格的Email地址的組成規則如下:

  • email的用戶名可以由字母、數字、所組成(不應該使用“”開頭);
  • email的域名可以由字母、數字、_、-所組成;
  • 域名的後綴必須是:.cn、.com、.net、.com.cn、.gov;
public class JavaAPIDemo362 {
	public static void main(String[] args) throws Exception {
		String str = "[email protected]"; 	// 要判斷的數據
		String regex = "[a-zA-Z0-9]\\w+@\\w+\\.(cn|com|com.cn|net|gov)"; 	// 正則表達式
		System.out.println(str.matches(regex));	// 正則匹配
	}

}

執行結果
true

15.13.3 java.util.regex包支持

Pattern類的常用方法(正則模式):
在這裏插入圖片描述
Matcher類的常用方法(匹配):
在這裏插入圖片描述
範例:使用Pattern類實現字符串拆分

public class JavaAPIDemo363A {
	public static void main(String[] args) throws Exception {
		String str = "ll()lia$()java&*()#@Python" ;	// 要拆分的字符串
		String regex = "[^a-zA-Z]+" ;	// 正則匹配標記
		Pattern pat = Pattern.compile(regex) ; 	// 編譯正則表達式
		String result [] = pat.split(str) ; 	// 字符串拆分
		for (int x = 0 ; x < result.length ; x ++) {	// 循環輸出拆分結果
			System.out.print(result[x] + "、");
		}
	}
}



執行結果

ll、lia、java、Python、

範例:使用Matcher類實現正則驗證

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JavaAPIDemo363B {
     public static void main(String[] args) {
		String str="101";
		String regex="\\d+";
		Pattern pat=Pattern.compile(regex);
		Matcher mat=pat.matcher(str);
		System.out.println(mat.matches());
	}
}

執行結果
true
範例:使用Matcher類實現字符串替換

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JavaAPIDemo364 {
       public static void main(String[] args) {
		String str="ljmfdvsnui$#$%reh!#$%";
		String regex="[^a-zA-Z0-9]";
		Pattern pat=Pattern.compile(regex);
		Matcher mat=pat.matcher(str);
		System.out.println(mat.replaceAll(""));
	}
} 

執行結果

ljmfdvsnuireh

範例:使用Matcher類實現數據分組操作

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class avaAPIDemo364B {
	public static void main(String[] args) throws Exception {
		// 定義一個語法,其中需要獲取“#{}”標記中的內容,此時就必須進行分組匹配操作
		String str = "INSERT INTO dept(deptno,dname,loc) VALUES (#{deptno},#{dname},#{loc})";
		String regex = "#\\{\\w+\\}";	// 正則表達式
		Pattern pat = Pattern.compile(regex); 	// 編譯正則表達式
		Matcher mat = pat.matcher(str);// 獲取Matcher類實例
		while (mat.find()) { 	// 是否有匹配成功的內容
			// 獲取每一個匹配的內容,並且將每一個內容中的“#{}”標記替換掉
			String data = mat.group(0).replaceAll("#|\\{|\\}", "") ;
			System.out.print(data + "、"); 
		}
	}

}

執行結果

deptno、dname、loc、
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章