首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

正則表達式字符類速查:字母、數字、大小寫、組合匹配常用模式一覽表

     編輯:Java 綜合教學

正則表達式字符類速查:字母、數字、大小寫、組合匹配常用模式一覽表

字符類是正則表達式最基礎也最高頻的構建塊。掌握常用字符類組合模式,能快速構建輸入驗證、文本提取、數據清洗等場景的正則表達式。

基礎字符類對照表

匹配目標正則模式等價寫法說明
任意單字符 (除換行).[\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]+$HELLOHello, hello, H3LLO
純小寫字母 (1+位)^[a-z]+$worldWorld, WORLD, w0rld
純字母 (大小寫不限)^[A-Za-z]+$HelloWorldHello123, Hello_World
字母數字組合 (1+位)^[A-Za-z0-9]+$Abc123Abc_123, abc-123
字母數字下劃線 (\\w)^\w+$user_name123user-name, user@name
固定長度 3 位任意字符^.{3}$abc, 123, a1!ab, abcd
用戶名 (字母開頭, 6-16位字母數字下劃線)^[A-Za-z]\w{5,15}$john_doe123123john, 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.comuser@, @example.com
手機號 (中國大陸)^1[3-9]\d{9}$1380013800012800138000, 1380013800
身份證號 (18位, 簡易)^\d{17}[\dXx]$11010119900307123X11010119900307123, 11010119900307123Y
URL (HTTP/HTTPS)^https?://[^\s/$.?#].[^\s]*$https://example.com/path?k=vftp://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.1256.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-312024-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) 可讀模式拆分多行添加註釋。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved