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

正則表達式 20 大經典實戰範例:從密碼驗證到 HTML 解析

     編輯:Java 綜合教學

正則表達式實戰寶典:20 個高頻場景、語法速查與線上工具

正則表達式是文字處理的瑞士刀,一行模式解決複雜驗證、提取、替換問題。本文精選前端/後端開發最高頻的 20 個實戰範例,附帶語法速查表與調試工具推薦。

一、20 大經典正則範例

1. 密碼強度驗證 (8-10 位,含大小寫字母+數字,無特殊字符)

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

解析:(?=...) 為正向前瞻斷言,不消耗字符,僅檢查條件。

2. 純中文檢測

^[\u4e00-\u9fa5]{0,}$

涵蓋 CJK 統一表意文字基本區。擴展區請用 \u3400-\u4DBF 等。

3. 單字字符 (字母數字下劃線)

^\w+$

等價 [a-zA-Z0-9_]+,Java 中 \w 預設僅 ASCII,Unicode 模式需 Pattern.UNICODE_CHARACTER_CLASS。

4. Email 格式驗證 (RFC 5322 簡化版)

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

5. 中國身份證號 (15/18 位)

 ^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
 ^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$

注意:僅格式校驗,真實有效性需查詢公安庫或校驗碼演算法。

6. 日期格式 yyyy-MM-dd (含閏年)

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

7. 金額格式 (正數,精確 2 位小數)

^[0-9]+(\.[0-9]{2})?$

8. 中國大陸手機號 (主流號段)

^(13[0-9]|14[57]|15[0-35-9]|18[0-9]|17[0-8]|19[13589])\d{8}$

號段頻繁更新,生產環境建議維護號段白名單配置而非硬編碼正則。

9. IE 瀏覽器版本檢測 (5-8 版)

^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/[5-9]\.0).*$

10. IPv4 地址

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

11. IPv6 地址 (簡化版)

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

12. URL 協議前綴補全

if (!s.match(/^[a-zA-Z]+:\/\//)) { s = 'https://' + s; }

13. 提取 URL 鏈接

^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?

14. Windows 文件路徑與副檔名 (.txt)

^([a-zA-Z]:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$

15. CSS 十六進制顏色代碼 (#RGB 或 #RRGGBB)

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

16. 提取網頁圖片 src

\< *img[^\>]*src *\= *[\"\']{0,1}([^\"\'\ >]*)

17. 提取 HTML 超鏈接 href

(\]*)(href="https?:\/\/)(?!...)[^"]+"((?!.*\brel=)[^\>]*)(?:[^\>]*)\>

18. CSS 屬性匹配 (property: value;)

^\s*[a-zA-Z\-]+\s*[:]{1}\s[a-zA-Z0-9\s.#]+[;]{1}

19. 移除 HTML 註釋

<!--(.*?)-->

需啟用 DOTALL / s 模式跨行匹配。

20. 匹配 HTML 標籤 (含屬性)

\<\/?\w+((\s+\w+(\s*\=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?\>

二、正則核心語法速查表

元字符說明範例
.任意字符 (除換行,DOTALL 含換行)a.c 匹配 abc, aXc
\d \D數字 / 非數字\d{3} 三位數
\w \W單字字符 / 非單字\w+ 變量名
\s \S空白 / 非空白\s* 任意空白
[abc]字符集合[aeiou] 元音
[^abc]排除字符集[^0-9] 非數字
* + ?0或多 / 1或多 / 0或1\d+ 至少一位數
{n,m}n 到 m 次\d{3,5} 3-5位數
^ $行首 / 行尾 (多行模式)^start
\b \B單字邊界 / 非邊界\bcat\b 整詞 cat
(...)捕獲組(\d{4})-(\d{2})
(?:...)非捕獲組(?:\d{3})?
(?=...)正向前瞻(?=.*\d) 含數字
(?!...)負向前瞻(?!.*\s) 無空白
(?<=...)正向後瞻(?<=\$)\d+ $ 後數字
(?<!...)負向後瞻(?<!\d)\d{3}(?!\d) 獨立3位數
\1 \2反向引用(['\"]).*?\1 配對引號

三、常用修飾符 (Flags)

  • i / CASE_INSENSITIVE:忽略大小寫
  • m / MULTILINE:^$ 匹配行首尾
  • s / DOTALL:. 匹配換行
  • x / COMMENTS:忽略模式空白,支援註釋
  • u / UNICODE_CHARACTER_CLASS:Unicode 感知 (Java 關鍵)

四、Java 實戰最佳實踐

// 1. 複用 Pattern (編譯昂貴,線程安全)
private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);

// 2. 使用 Matcher 進行匹配/提取/替換
Matcher m = EMAIL_PATTERN.matcher(input);
if (m.matches()) { ... }           // 整串匹配
while (m.find()) {                 // 尋找所有子串
    System.out.println(m.group(1)); // 獲取第 1 組
}

// 3. 替換
String masked = EMAIL_PATTERN.matcher(email).replaceAll("***@***.com");

// 4. 分割 (String.split 內部用 Pattern)
String[] parts = input.split("\\s*,\\s*"); // 逗號分割,忽略空白

五、推薦線上調試工具

  1. Regex101 (regex101.com):支援 PCRE/JS/Java/Golang,即時解釋、測試、生成代碼片段,**首選**。
  2. RegExr (regexr.com):視覺化高亮、社區範例庫。
  3. Debuggex (debuggex.com):圖形化 AST 展示,適合複雜正則分析。

六、避坑指南

  • 貪婪 vs 惰性:.* 貪婪匹配盡可能多,.*? 惰性匹配盡可能少 (HTML 解析必用惰性)。
  • 災難性回溯:(a+)+b 匹配 aaaaac 導致指數級回溯,改用佔有優先量詞 (a++)+b 或原子組 (?>a+)+b。
  • Java 字串轉義:代碼中寫正則需雙重轉義 \\d、\\\\,建議用文本塊 (Java 15+) """\\d+"""。
  • 不要用正則解析 HTML/XML:用 Jsoup、DOM 解析器,正則無法處理巢狀結構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved