說明
正則表達式是一個強大的字符串處理工具,可以對字符串進行查找、提取、分割、替換等操作。所有的正則可以使用的標記都在 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);
}
}
}