Java基礎類庫之正則表達式

說明

正則表達式是一個強大的字符串處理工具,可以對字符串進行查找、提取、分割、替換等操作。所有的正則可以使用的標記都在 java.util.regex.Pattern 類裏面定義:

單個字符(匹配的數量爲1)

  • 字符:表示有一位字符所組成;
  • \\:表示轉義字符 \;
  • \t:表示一個 \t 符號;
  • \n:表示一個\n 符號;

字符集(匹配的數量爲1)

符號 說明
[abc] 表示可能是 a 或者 b 或者 c 中的任意一個
[^abc] 表示不是 a、b、c 中的任意一個
[a-z] 所有的小寫字母
[A-Z] 表示所有的大寫字母
[a-zA-Z] 表示任意的一位字母,不區分大小寫
[0-9] 表示任意的一位數字

簡化的字符集表達式(匹配的數量爲1)

符號 說明
. 表示任意的一位字符
\d 等價於[0-9],屬於簡化寫法
\D 等價於[^0-9],非 0 到 9 ,屬於簡化寫法
\s 表示任意的空白字符,例如:\t,\n
\S 表示任意的非空白字符,例如:\T
\w 等價於[a-zA-Z_0-9],表示由任意的字母、數字、下劃線"_"所組成
\W 等價於[^a-zA-Z_0-9],表示不是由任意的字母、數字、下劃線"_"所組成

邊界匹配

  • ^ : 正則的開始
  • $:正則的結束

數量表達式

符號 說明
? 表示此正則可以出現 0次 或 1次
+ 表示此正則可以 1次 或 1次以上(如果沒有出現,返回false)
* 表示此正則可以出現 0次 或 1次 或 多次
{n} 表示正則正好出現 n次
{n,} 表示正則出現 n次以上(包含n次)
{n,m} 表示正則出現 n 到 m 次(包含 n 和 m)

邏輯運算

符號 說明
正則1 正則2 表示正則1判斷完成之後繼續判斷正則2
正則1 | 正則2 表示正則1 或者 正則2有一組滿足即可
(正則) 表示將多個正則作爲一組,可以爲這一組單獨設置出現的次數

String 類對正則的支持

String 類裏也提供了幾個正則表達式的特殊方法:

  • boolean matches(String regex):判斷該字符串是否匹配指定的正則表達式。
  • String replaceAll(String regex, String replacement):將該字符串中所有所有匹配的 regex 的子串替換成 replacement。
  • String replaceFirst(String regex, String replacement):將該字符串中第一個匹配 regex 的子串替換成 replacement。
  • String[] split(String regex):以 regex 作爲分割符,把該字符串分割成多個子串。

判斷IP地址

public class Demo {
	public static void main(String[] args) {
		String str = "192.168.1.3";
		// 可以簡化爲:String regex = "(\\d{1,3}\\.){3}\\d{1,3}"
		String regex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
		System.out.println("IP地址是否正確:" + str.matches(regex));    // true
	}
}

判斷字符串是否是數字,如果是則轉換爲double類型

public class Demo {
	public static void main(String[] args) {
		String str = "10.2";
		String regex = "\\d+(\\.\\d+)?"; // 小數位
		System.out.println(str.matches(regex));// true
		if (str.matches(regex)) {
			System.out.println(Double.parseDouble(str));// 轉換爲double類型
		}
	}
}

判斷是否日期格式

import java.text.SimpleDateFormat;
import java.util.Date;
 
public class Demo {
	public static void main(String[] args) throws Exception {
		String str = "2018-11-24";
		String regex = "\\d{4}-\\d{2}-\\d{2}";
		if (str.matches(regex)) {
			Date date = new SimpleDateFormat("yyyy-MM-dd").parse(str);
			System.out.println(date);
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章