正则表达式中的特殊字符(元字符)各自有特定含义。以下是常用特殊字符及其作用:
1. 定位符
| 字符 | 含义 | 示例 |
|---|
^ | 匹配字符串开头 | ^abc 匹配以 "abc" 开头的字符串 |
$ | 匹配字符串结尾 | abc$ 匹配以 "abc" 结尾的字符串 |
\b | 单词边界 | \bword\b 匹配整个单词 "word" |
\B | 非单词边界 | \Bword\B 匹配 "sword" 中的 "word" |
2. 量词
| 字符 | 含义 | 示例 |
|---|
* | 0 次或多次 | a* 匹配 "", "a", "aa", "aaa"... |
+ | 1 次或多次 | a+ 匹配 "a", "aa", "aaa"... 不匹配 "" |
? | 0 次或 1 次 | a? 匹配 "" 或 "a" |
{n} | 恰好 n 次 | a{3} 匹配 "aaa" |
{n,} | 至少 n 次 | a{2,} 匹配 "aa", "aaa"... |
{n,m} | n 到 m 次 | a{2,4} 匹配 "aa", "aaa", "aaaa" |
3. 字符类
| 字符 | 含义 | 示例 |
|---|
. | 匹配除换行符外的任意字符 | a.c 匹配 "abc", "a c", "a1c" |
\d | 数字 [0-9] | \d{3} 匹配三位数字 |
\D | 非数字 [^0-9] | \D+ 匹配非数字字符 |
\w | 单词字符 [a-zA-Z0-9_] | \w+ 匹配单词 |
\W | 非单词字符 | \W 匹配空格、标点等 |
\s | 空白字符(空格、制表符等) | \s+ 匹配多个空白 |
\S | 非空白字符 | \S+ 匹配非空白字符 |
[abc] | a、b 或 c 中的任意一个 | [aeiou] 匹配任意元音字母 |
[^abc] | 除 a、b、c 以外的任意字符 | [^0-9] 匹配非数字 |
[a-z] | a 到 z 的范围 | [A-Z] 匹配大写字母 |
[0-9] | 0 到 9 的范围 | [0-9] 匹配数字 |
4. 分组与选择
| 字符 | 含义 | 示例 |
|---|
| | 或(选择) | a|b 匹配 "a" 或 "b" |
(...) | 捕获分组 | (ab)+ 匹配 "ab", "abab"... |
(?:...) | 非捕获分组 | (?:ab)+ 分组但不捕获 |
(?=...) | 正向先行断言 | \d(?=px) 匹配后面跟着 "px" 的数字 |
(?!...) | 负向先行断言 | \d(?!px) 匹配后面不跟 "px" 的数字 |
5. 转义
| 字符 | 含义 | 示例 |
|---|
\\ | 转义特殊字符 | \\. 匹配字面点号 . |
\n | 换行符 | |
\r | 回车符 | |
\t | 制表符 | |
常见示例
String regex = "^[\\w.-]+@[\\w.-]+\\.\\w+$";
String regex = "^1[3-9]\\d{9}$";
String regex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
String regex = "<([^>]+)>([^<]*)</\\1>";
String regex = "[\\u4e00-\\u9fa5]+";
优先级(从高到低)
- 转义符
\
- 括号
() []
- 量词
* + ? {}
- 连接(相邻字符)
- 选择
|
在 Java 中的注意事项
String regex = "\\d+\\.\\d+";
记忆技巧:如果要用字面意义的特殊字符(如 .、*、+、?、|、(、)、[、]、{、}、^、$、\),都需要用 \\ 转义。