1. 基础量词
符号 | 含义 | 示例 | 匹配示例 |
---|---|---|---|
? | 前一个字符0次或1次 | colou?r | "color", "colour" |
* | 前一个字符0次或多次 | go*gle | "ggle", "google", "gooogle" |
+ | 前一个字符1次或多次 | go+gle | "google", "gooogle" (不匹配"ggle") |
2. 分组与选择
表达式 | 含义 | 示例 | 匹配示例 |
---|---|---|---|
(cat|dog) | 匹配"cat"或"dog" | I have (cat|dog) | "I have cat", "I have dog" |
a (cat|dog) | 匹配"a cat"或"a dog" | 同上 | 同上 |
3. 字符类
表达式 | 含义 | 示例 | 匹配示例 |
---|---|---|---|
[a-z]+ | 1个或多个小写字母 | [a-z]+ | "abc", "hello" |
[A-Z] | 单个大写字母 | [A-Z][a-z]* | "Apple", "Banana" |
[0-9] | 单个数字 | [0-9]{3} | "123", "456" |
. | 任意单个字符(除换行符) | a.c | "abc", "a c", "a.c" |
4. 边界匹配
符号 | 含义 | 示例 | 作用 |
---|---|---|---|
^ | 字符串开头 | ^Hello | 匹配以"Hello"开头的字符串 |
$ | 字符串结尾 | world$ | 匹配以"world"结尾的字符串 |
\b | 单词边界 | \bcat\b | 匹配独立单词"cat" |
5. 预定义字符类
表达式 | 等价形式 | 含义 | 示例 |
---|---|---|---|
\d | [0-9] | 数字字符 | \d+ 匹配 "123" |
\w | [a-zA-Z0-9_] | 单词字符(字母数字下划线) | \w+ 匹配 "user1" |
\s | [ \t\n\r\f] | 空白字符 | \s+ 匹配空白 |
\D | [^0-9] | 非数字字符 | \D+ 匹配 "abc" |
\W | [^\w] | 非单词字符 | \W 匹配 "@" |
\S | [^\s] | 非空白字符 | \S+ 匹配 "text" |
6. 量词范围
表达式 | 含义 | 示例 | 匹配范围 |
---|---|---|---|
{n} | 恰好n次 | a{3} | "aaa" |
{n,} | 至少n次 | \d{2,} | "12", "123" |
{n,m} | n到m次 | [a-z]{2,4} | "ab", "abcd" |
7. 转义字符
符号 | 说明 | 示例 | 匹配内容 |
---|---|---|---|
\. | 匹配实际的点号 | example\.com | "example.com" |
\\ | 匹配反斜杠 | C:\\ | "C:" |
\? | 匹配问号 | really\? | "really?" |
综合示例
1. 邮箱验证
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
-
匹配:
user@example.com
-
不匹配:
user@.com
2. 日期匹配
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
-
匹配:
2023-05-15
-
不匹配:
2023-13-01
3. HTML标签提取
<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)
-
匹配:
<div class="header">Content</div>
Java中使用示例
String text = "The cat and the dog are friends.";
Pattern pattern = Pattern.compile("\\b(cat|dog)\\b");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
// 输出:
// Found: cat
// Found: dog
易错点提醒
-
贪婪匹配:
.*
会匹配到尽可能长的字符串,用.*?
实现非贪婪匹配 -
分组引用:用
( )
捕获分组后,可用$1
或\1
引用 -
特殊字符:
[ ] ( ) { } . * + ? ^ $ \ |
需要转义