正則表達式字符類速查:字母、數字、大小寫、組合匹配常用模式一覽表
字符類是正則表達式最基礎也最高頻的構建塊。掌握常用字符類組合模式,能快速構建輸入驗證、文本提取、數據清洗等場景的正則表達式。
基礎字符類對照表
| 匹配目標 | 正則模式 | 等價寫法 | 說明 |
| 任意單字符 (除換行) | . | [\s\S] (含換行) | 單行模式下不匹配 \n |
| 數字 | \d | [0-9] | Digit |
| 非數字 | \D | [^0-9] | |
| 字母數字下劃線 (單詞字符) | \w | [A-Za-z0-9_] | Word (ASCII 模式) |
| 非單詞字符 | \W | [^A-Za-z0-9_] | |
| 空白字符 | \s | [ \t\n\r\f\v] | Space/Tab/換行/換頁 |
| 非空白字符 | \S | [^ \t\n\r\f\v] | |
| 大寫字母 | [A-Z] | | ASCII 範圍 |
| 小寫字母 | [a-z] | | |
| 大小寫字母 | [A-Za-z] | | |
| 字母數字 (無下劃線) | [A-Za-z0-9] | | Alphanumeric |
| 十六進制字符 | [0-9A-Fa-f] | | |
| 中文字符 (基本區) | [\u4e00-\u9fa5] | | CJK Unified Ideographs |
常用驗證模式速查
| 驗證場景 | 正則模式 | 匹配示例 | 不匹配示例 |
| 純大寫字母 (1+位) | ^[A-Z]+$ | HELLO | Hello, hello, H3LLO |
| 純小寫字母 (1+位) | ^[a-z]+$ | world | World, WORLD, w0rld |
| 純字母 (大小寫不限) | ^[A-Za-z]+$ | HelloWorld | Hello123, Hello_World |
| 字母數字組合 (1+位) | ^[A-Za-z0-9]+$ | Abc123 | Abc_123, abc-123 |
| 字母數字下劃線 (\\w) | ^\w+$ | user_name123 | user-name, user@name |
| 固定長度 3 位任意字符 | ^.{3}$ | abc, 123, a1! | ab, abcd |
| 用戶名 (字母開頭, 6-16位字母數字下劃線) | ^[A-Za-z]\w{5,15}$ | john_doe123 | 123john, john-, jo |
| 密碼 (8-20位, 含大小寫數字特殊字符) | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,20}$ | Passw0rd! | password, PASSWORD, Passw0rd |
| 郵箱 (簡易版) | ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ | user@example.com | user@, @example.com |
| 手機號 (中國大陸) | ^1[3-9]\d{9}$ | 13800138000 | 12800138000, 1380013800 |
| 身份證號 (18位, 簡易) | ^\d{17}[\dXx]$ | 11010119900307123X | 11010119900307123, 11010119900307123Y |
| URL (HTTP/HTTPS) | ^https?://[^\s/$.?#].[^\s]*$ | https://example.com/path?k=v | ftp://example.com, https:// |
| IPv4 地址 | ^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$ | 192.168.1.1 | 256.1.1.1, 192.168.1 |
| 日期 (YYYY-MM-DD) | ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ | 2024-12-31 | 2024-13-01, 2024-02-30 |
量詞與邊界控制
| 符號 | 含義 | 示例 |
* | 0 次或多次 (貪婪) | ab*c 匹配 ac, abc, abbc, abbbc... |
+ | 1 次或多次 (貪婪) | ab+c 匹配 abc, abbc, abbbc... |
? | 0 次或 1 次 | ab?c 匹配 ac, abc |
{n} | 恰好 n 次 | \d{3} 匹配 3 位數字 |
{n,} | 至少 n 次 | \d{2,} 至少 2 位數字 |
{n,m} | n 到 m 次 | \d{3,5} 3-5 位數字 |
*? +? ?? | 非貪婪模式 (匹配最少) | ab*?c 優先匹配 ac |
^ | 字符串開始 (多行模式下行首) | ^Hello |
$ | 字符串結束 (多行模式下行尾) | World$ |
\b | 單詞邊界 (\w 與 \W 交界) | \bcat\b 匹配 cat 不匹配 category |
\B | 非單詞邊界 | \Bcat\B 匹配 scatter 中的 cat |
分組與引用
| 語法 | 說明 | 示例 |
(...) | 捕獲組 (編號 1,2,3...) | (\d{4})-(\d{2}) $1=年 $2=月 |
(?:...) | 非捕獲組 (不佔用編號、性能稍好) | (?:\d{3}-)?\d{8} |
(?<name>...) | 命名捕獲組 (JDK 7+ / JS / Python / .NET) | (?<year>\d{4}) 引用 \k<year> |
\1 \2 \k<name> | 反向引用 (同一字符串內) | (['\"]).*?\1 匹配成對引號 |
$1 $2 ${name} | 替換引用 (replace/replaceAll) | s.replaceAll("(\\d{4})-(\\d{2})", "$2/$1") |
常用修飾符 (Flags)
| 標準 | 內聯 | 說明 |
| CASE_INSENSITIVE | (?i) | 忽略大小寫匹配 |
| MULTILINE | (?m) | ^$ 匹配行首行尾 |
| DOTALL / SINGLELINE | (?s) | . 匹配任意字符含換行 |
| UNICODE_CASE | (?u) | Unicode 感知大小寫 (配合 ?i) |
| COMMENTS | (?x) | 允許空白和註釋 (編寫可讀正則) |
| UNIX_LINES | (?d) | 僅 \n 作為行終止符 |
組合示例:(?si)^\s*(\w+)\s*:\s*(.+?)\s*$ 忽略大小寫、單行模式、匹配 key: value 行。
Java 代碼中使用提示
// 1. Pattern 編譯複用 (線程安全)
private static final Pattern EMAIL_PATTERN = Pattern.compile(
"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"
);
// 2. Matcher 逐個匹配
Matcher m = EMAIL_PATTERN.matcher(input);
while (m.find()) {
System.out.println(m.group()); // 完整匹配
// m.group(1) 分組 1
}
// 3. String 便利方法 (內部創建 Pattern, 不宜高頻調用)
boolean valid = input.matches(regex); // 整串匹配
String[] parts = input.split(regex); // 分割
String replaced = input.replaceAll(regex, rep); // 替換
String first = input.replaceFirst(regex, rep); // 首次替換
避坑指南:Java 字符串中 \ 需雙重轉義 (\\d, \\w, \\[);String.matches() 默認整串匹配 (隱式 ^$),Matcher.find() 為子串搜索;高頻場景預編譯 Pattern;複雜正則使用 (?x) 可讀模式拆分多行添加註釋。