| 字符/構造 | 含義 | 示例 |
|---|---|---|
\ | 轉義字符,或標識特殊序列 (如 \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' |
\unnnn | Unicode 字符 (4 位十六進制) | \u4e00 = '一' |
\cX | 控制字符 (Ctrl+X) | \cM = 回車 |
\number | 後向引用第 number 個捕獲組 | (.)\1 匹配連續重複字符 |
^-?\\d+$^[1-9]\\d*$^\\d+(\\.\\d{1,2})?$^\\d{1,3}(,\\d{3})*(\\.\\d{2})?$^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$^https?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$^((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}$^\\d{17}[\\dXx]$^[1-9]\\d{5}$[\\u4e00-\\u9fa5][^\\x00-\\xff]^[a-zA-Z]\\w{5,17}$^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[~!@#$%^&*]).{8,20}$^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$<!-- 僅允許中文 -->
<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>
// 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% 的字符串校驗、提取、替換、分割需求。複雜場景下請注意性能與可讀性平衡,必要時拆分為多步驟處理。