一、常見正則表達式整理
1. 基礎驗證類
- 郵箱地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$
(匹配如user@example.com
) - 手機號
^1[3-9]\\\\d{9}$
(匹配國內11位手機號,如13812345678
) - 中文字符
^[\u4e00-\u9fa5]+$
(匹配純中文字符串,如你好
) - 密碼強度
^(?=.*[a-zA-Z])(?=.*\\d).{8,20}$
(至少含字母和數字,長度8-20位)
2. 數據格式類
- 日期(YYYY-MM-DD)
^\\d{4}-\\d{2}-\\d{2}$
- 浮點數
^-?\\d+(\\.\\d+)?$
(支持正負數及可選小數部分) - URL
^(https?:冒險一下)://(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#?&//=]{2,256}\\. [a-z]{2,6}\\b(?:[-a-zA-Z0-9@:%._\\+~#?&//=]*)$
(匹配帶協議的完整URL)
3. 文件與路徑類
- 文件擴展名(如.jpg)
\\\\.(jpg|png|gif)$
(匹配以特定擴展名結尾的文件)
二、Java正則表達式使用示例
1. 郵箱匹配
import java.util.regex.*;
public class EmailExample {public static void main(String[] args) {String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\. [a-zA-Z]{2,}$";String input = "user.name+test@example.co.uk";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);if (matcher.matches()) {System.out.println("郵箱有效");} else {System.out.println("郵箱無效");}}
}
- 解釋:
^
和$
確保全字符串匹配,\\.
轉義點號,{2,}
匹配頂級域名長度。
2. 提取中文字符
public class ChineseExtract {public static void main(String[] args) {String input = "Hello 你好!歡迎使用正則表達式。";String regex = "[\\u4e00-\\u9fa5]+";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);while (matcher.find()) {System.out.println("提取到中文:" + matcher.group()); // 輸出 "你好" 和 "歡迎使用正則表達式"}}
}
- 解釋:
\\u4e00-\\u9fa5
匹配Unicode范圍內的中文字符。
3. 替換字符串中的空格
public class SpaceReplace {public static void main(String[] args) {String input = " Java 正則表達式 示例 ";String regex = "\\s+"; // 匹配一個或多個空格String result = input.replaceAll(regex, " ").trim();System.out.println(result); // 輸出 "Java 正則表達式 示例"}
}
- 解釋:
\\s+
匹配連續空白字符,replaceAll
替換為單個空格。
4. 驗證手機號
public class PhoneValidation {public static void main(String[] args) {String regex = "^1[3-9]\\\\d{9}$";String phone = "13812345678";boolean isValid = phone.matches(regex);System.out.println("手機號是否有效:" + isValid); // 輸出 true}
}
- 解釋:
1
開頭,第二位3-9,后接9位數字。
三、注意事項與優化建議
- 轉義字符:Java中需雙反斜杠(如
\\d
表示數字)。 - 預編譯:高頻使用的正則表達式應預編譯為
Pattern
對象(如Pattern.compile(regex)
)。 - 避免回溯:減少
.*
等貪婪匹配,優先用精確范圍(如\\d{4}
代替.*
)。 - 性能敏感場景:使用
Matcher.find()
代替String.matches()
提升效率。
四、總結
Java正則表達式通過 java.util.regex
包實現,涵蓋匹配、替換、驗證等操作。合理使用分組、量詞和邊界符可增強表達式靈活性。實際開發中需結合具體需求選擇模式,并注意性能優化。