📌 目录:
1. 什么是正则表达式?
正则表达式(Regular Expression,简称 Regex)是一种模式匹配技术,主要用于:
✅ 字符串搜索(如查找包含某个单词的文本)
✅ 文本替换(如替换敏感词)
✅ 格式验证(如校验邮箱、手机号、日期格式)
📌 示例:
- 正则表达式:
\d{3}-\d{4}-\d{4}
- 可匹配:
123-4567-8901
2. 正则表达式的基本语法
表达式 | 描述 | 示例 |
---|---|---|
. | 任意字符(除换行符) | a.b 匹配 acb |
^ | 匹配行首 | ^Hello 匹配 "Hello world" |
$ | 匹配行尾 | world$ 匹配 "Hello world" |
\d | 数字(0-9) | \d+ 匹配 "123" |
\w | 字母、数字、下划线 | \w+ 匹配 "hello_123" |
\s | 空格、制表符、换行符 | \s+ 匹配 " " |
3. 字符类和元字符
表达式 | 描述 | 示例 |
---|---|---|
[abc] | 匹配 a 、b 或 c | [aeiou] 匹配元音字母 |
[^abc] | 匹配非 a 、b 或 c | [^0-9] 匹配非数字 |
[a-z] | 匹配小写字母 | [A-Z] 匹配大写字母 |
[0-9] | 匹配数字 | [1-5] 匹配 1-5 |
\b | 匹配单词边界 | \bcat\b 只匹配 cat |
4. 量词和匹配规则
量词 | 描述 | 示例 |
---|---|---|
* | 0 次或多次 | a* 匹配 "aaa" 、"" |
+ | 1 次或多次 | a+ 匹配 "aaa" ,但不匹配 "" |
? | 0 次或 1 次 | a? 匹配 "a" 或 "" |
{n} | 恰好 n 次 | a{3} 只匹配 "aaa" |
{n,} | 至少 n 次 | a{2,} 匹配 "aa" 或更多 |
{n,m} | n 到 m 次 | a{2,4} 匹配 "aa" 、"aaa" 、"aaaa" |
📌 示例:
colou?r
可匹配"color"
和"colour"
(?
代表u
可有可无)\d{2,4}
可匹配12
、123
、1234
5. 分组与回溯引用
表达式 | 描述 | 示例 |
---|---|---|
(abc) | 捕获组 | (ab)+ 匹配 "abab" |
(?:abc) | 非捕获组 | (?:ab)+ 仍匹配 "abab" ,但不存储匹配项 |
\1, \2 | 回溯引用 | (\w+)\s\1 匹配 "hello hello" |
📌 示例:
(\d{2})-(\d{2})-(\d{4})
可匹配12-05-2024
,并将12
、05
和2024
分别存入分组\1
、\2
、\3
6. 常见正则表达式示例
匹配内容 | 正则表达式 | 示例匹配 |
---|---|---|
邮箱地址 | ^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$ | user@example.com |
手机号(中国) | ^1[3-9]\d{9}$ | 13812345678 |
IPv4 地址 | `^(25[0-5] | 2[0-4][0-9] |
URL 地址 | ^(https?://)?(www\.)?[\w-]+(\.[\w-]+)+([/?#].*)?$ | https://www.example.com |
7. 如何在编程语言中使用正则表达式
📌 Python
import re
pattern = r"\d+"
result = re.findall(pattern, "订单号 12345, 价格 678")
print(result) # ['12345', '678']
📌 JavaScript
const pattern = /\d+/g;
const result = "订单号 12345, 价格 678".match(pattern);
console.log(result); // ["12345", "678"]
📌 PHP
$pattern = "/\d+/";
preg_match_all($pattern, "订单号 12345, 价格 678", $matches);
print_r($matches[0]); // Array ( [0] => 12345 [1] => 678 )
8. 正则表达式的优化技巧
✅ 避免贪婪匹配:
使用 .*?
而非 .*
,减少回溯。
✅ 指定字符集:
用 [\w.-]+
替代 .*
,限定匹配范围。
✅ 使用非捕获组:
用 (?:abc)
避免不必要的分组存储,提高效率。
9. 参考资料
🔗 出站链接
🔗 站内链接
这样整理后,你觉得是否符合你的需求?😃
发表回复