💡 正则表达式(Regular Expression, regex)知识点总结 💡
正则表达式是一种用于匹配字符串的模式,广泛用于搜索、替换、验证等操作。
📌 正则表达式的主要作用
1️⃣ 字符串匹配 🧐
- 检查一个字符串是否符合某种模式。
- 例如,验证用户输入的邮箱、手机号、密码强度等。
2️⃣ 搜索和提取 🔍
- 在大量文本中找到符合要求的内容。
- 例如,从网页中提取URL、邮箱、电话号码等。
3️⃣ 字符串替换 🔄
- 将符合规则的文本替换为指定内容。
- 例如,把多个空格替换成一个空格。
4️⃣ 数据格式化 ✏️
- 规范化文本数据,如日期格式转换、去除特殊字符等。
5️⃣ 日志分析 📊
- 通过正则表达式分析日志文件,提取错误信息或IP 地址等重要数据。
📌 正则表达式的基础
普通字符匹配:
abc
只能匹配"abc"
,不会匹配"aabc"
、"abcd"
等。
特殊字符(元字符):
元字符 含义 示例 .
任意单个字符(换行符除外) "a.c"
可匹配"abc"
、"aac"
\d
数字 [0-9]
"12\d"
可匹配"123"
、"125"
\w
字母、数字或下划线 [a-zA-Z0-9_]
"\w+"
可匹配"hello123"
\s
空白字符(空格、制表符、换行符) "a\sb"
可匹配"a b"
\b
单词边界 "\bcat\b"
匹配"cat"
但不匹配"catalog"
^
匹配行首 "^abc"
只匹配"abc"
在行首的情况$
匹配行尾 "xyz$"
只匹配"xyz"
在行尾的情况
📌 量词(控制匹配次数)
量词 | 含义 | 示例 |
---|---|---|
* |
匹配 0 次或多次 | a* 匹配 "" 、"a" 、"aaaa" |
+ |
匹配 1 次或多次 | a+ 匹配 "a" 、"aaaa" ,但不匹配 "" |
? |
匹配 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" |
📌 字符类(Character Classes)
语法 | 含义 | 示例 |
---|---|---|
[abc] |
只匹配 a 或 b 或 c |
gr[ae]y 可匹配 "gray" 或 "grey" |
[^abc] |
除 a、b、c 以外的任何字符 |
"[^aeiou]" 匹配所有辅音字母 |
[0-9] |
匹配 0~9 的任何数字 | "[0-9]+" 匹配 "123" 、"456" |
[a-z] |
匹配小写字母 | "[a-z]+" 匹配 "hello" |
[A-Z] |
匹配大写字母 | "[A-Z]+" 匹配 "HELLO" |
📌 逻辑运算符
语法 | 含义 | 示例 |
---|---|---|
` | ` | 逻辑 OR(或) |
() |
分组 | "(ab)+" 可匹配 "ab" 、"abab" |
(?:...) |
非捕获分组 | "(?:ab)+" 仅匹配 "abab" ,但不存储匹配内容 |
📌 常见正则表达式
1️⃣ 匹配邮箱 📧:
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
✅ 可匹配 "test.email@example.com"
2️⃣ 匹配手机号 📱(以中国手机号 1
开头):
^1[3-9]\d{9}$
✅ 可匹配 "13812345678"
3️⃣ 匹配 IP 地址 🌐:
^(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])$
✅ 可匹配 "192.168.1.1"
4️⃣ 匹配日期(YYYY-MM-DD) 📆:
^(19|20)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
✅ 可匹配 "2024-03-14"
📌 Java 正则表达式示例
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "hello regex 123!";
String pattern = "\\d+"; // 匹配数字
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println("匹配到: " + m.group());
}
}
}
🔹 输出:
匹配到: 123
📌 小结
✅ 正则表达式的核心知识点:
✔ 元字符(特殊字符):.
\d
\w
\s
^
$
✔ 量词:*
+
?
{n,m}
✔ 字符类:[abc]
[a-z]
[^0-9]
✔ 逻辑运算:|
()
✔ 常见应用:邮箱、手机号、IP 地址等