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

Java 正則表達式語法大全:元字符、量詞、分組、斷言、常用驗證模式速查手冊

     編輯:Java 相關知識

正則表達式元字符完整表

字符/構造含義示例
\轉義字符,或標識特殊序列 (如 \d, \n)\. 匹配點號
^匹配字符串開始 (多行模式匹配行首)^Hello
$匹配字符串結束 (多行模式匹配行尾)World$
*匹配前面子表達式 0 次或多次 {0,}ab*c 匹配 ac, abc, abbc...
+匹配 1 次或多次 {1,}ab+c 匹配 abc, abbc...
?匹配 0 次或 1 次 {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 位數字
? (緊跟量詞後)**非貪婪/惰性匹配** (匹配最少字符).*? .+?
.匹配除 \n 外任意字符 (DOTALL 模式下含 \n)a.b 匹配 aXb, a\nb(需 DOTALL)
(pattern)**捕獲組**,匹配並存儲供後向引用 ($1, \1)(\d{4})-(\d{2})
(?:pattern)**非捕獲組**,僅分組不存儲,性能更好(?:\d{3})-
(?=pattern)**正向肯定順序斷言** (零寬斷言),匹配 pattern 前的位置Windows(?=10|11) 匹配 Windows10 中的 Windows
(?!pattern)**正向否定順序斷言**,匹配非 pattern 前的位置Windows(?!95|98)
(?<=pattern)**反向肯定順序斷言**,匹配 pattern 後的位置(?<=\$)\d+ 匹配 $ 後的數字
(?**反向否定順序斷言**(? 匹配非數字包圍的 3 位數
x|y或運算cat|dog
[xyz]字符集,匹配任一字符[aeiou]
[^xyz]排除字符集[^0-9] 非數字
[a-z]字符範圍[A-Za-z]
\b單詞邊界\bword\b
\B非單詞邊界
\d數字 [0-9]
\D非數字 [^0-9]
\w單詞字符 [a-zA-Z0-9_]
\W非單詞字符
\s空白字符 [ \t\n\r\f\v]
\S非空白字符
\n, \r, \t, \f, \v換行、回車、Tab、換頁、垂直製表
\xnn十六進制字符 (2 位)\x41 = 'A'
\unnnnUnicode 字符 (4 位十六進制)\u4e00 = '一'
\cX控制字符 (Ctrl+X)\cM = 回車
\number後向引用第 number 個捕獲組(.)\1 匹配連續重複字符

常用驗證正則模式庫 (Java 字符串寫法,雙重轉義)

數字與金額

  • 整數: ^-?\\d+$
  • 正整數: ^[1-9]\\d*$
  • 小數 (2 位): ^\\d+(\\.\\d{1,2})?$
  • 金額 (分隔符): ^\\d{1,3}(,\\d{3})*(\\.\\d{2})?$

身份與網絡

  • Email: ^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$
  • URL: ^https?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$
  • IPv4: ^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$
  • 手機號 (中國大陸): ^1[3-9]\\d{9}$
  • 身份證 (18 位): ^\\d{17}[\\dXx]$
  • 郵政編碼: ^[1-9]\\d{5}$

字符串格式

  • 中文字符: [\\u4e00-\\u9fa5]
  • 雙字節字符 (含漢字): [^\\x00-\\xff]
  • 用戶名 (字母開頭, 6-18 位, 字母數字下劃線): ^[a-zA-Z]\\w{5,17}$
  • 強密碼 (含大小寫數字特殊符號, 8-20 位): ^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[~!@#$%^&*]).{8,20}$
  • 日期 (YYYY-MM-DD): ^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$

前端表單限制輸入 (JavaScript 正則應用)

<!-- 僅允許中文 -->
<input onkeyup="value=value.replace(/[^\\u4E00-\\u9FA5]/g,'')">

<!-- 僅允許數字 -->
<input onkeyup="value=value.replace(/\\D/g,'')">

<!-- 僅允許數字和字母 -->
<input onkeyup="value=value.replace(/[^\\w]/g,'')">

<!-- 允許中文、數字、字母、下劃線 -->
<input onkeyup="value=value.replace(/[^\\u4E00-\\u9FA5\\w]/g,'')">

<!-- 限制長度 (雙字節算 2) -->
<textarea onpropertychange="maxLength(this, 100)"></textarea>
<script>
function maxLength(field, limit) {
    var len = field.value.replace(/[^\\x00-\\xff]/g, "**").length;
    if (len > limit) field.value = field.value.substring(0, limit);
}
</script>

IP 地址轉換算法 (正則提取分段)

// Java 版
public long ipToLong(String ip) {
    String[] parts = ip.split("\\.");
    if (parts.length != 4) throw new IllegalArgumentException("Invalid IP");
    return (Long.parseLong(parts[0]) << 24) |
           (Long.parseLong(parts[1]) << 16) |
           (Long.parseLong(parts[2]) << 8) |
           Long.parseLong(parts[3]);
}

屏蔽敏感詞示例

String text = "這是一個包含敏感詞的文本";
String[] sensitive = {"敏感詞", "禁止詞"};
for (String word : sensitive) {
    text = text.replaceAll("(?i)" + Pattern.quote(word), "***"); // 忽略大小寫
}

總結

正則表達式是文本處理的瑞士軍刀。熟記元字符含義、掌握貪婪/非貪婪、善用斷言與分組引用,配合 Java Pattern/Matcher API,可高效解決 99% 的字符串校驗、提取、替換、分割需求。複雜場景下請注意性能與可讀性平衡,必要時拆分為多步驟處理。

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