什么是正则表达式?
正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述字符串模式的特殊语法。它就像文本处理的"超级搜索"工具,可以让你用简单的模式匹配复杂的文本结构。
为什么学习正则表达式?
✅ 高效文本处理:快速验证、搜索和提取数据
✅ 代码简化:一行正则可能替代数十行普通代码
✅ 跨平台通用:几乎所有编程语言都支持正则表达式
✅ 强大灵活:处理复杂的文本匹配需求
基础语法入门
1. 字面值字符
最简单的正则就是普通字符:
hello 匹配 "hello"
test 匹配 "test"
123 匹配 "123"2. 元字符(特殊字符)
3. 字符类
4. 量词
5. 分组和捕获
常用正则表达式示例
1. 邮箱验证
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$^字符串开始[a-zA-Z0-9._%+-]+用户名部分@必须的@符号[a-zA-Z0-9.-]+域名部分\.转义的点号[a-zA-Z]{2,}$顶级域名(2个以上字母)
2. 手机号验证(中国大陆)
^1[3-9]\d{9}$^1以1开头[3-9]第二位是3-9\d{9}$后面9位数字
3. URL匹配
https?://[^\s/$.?#].[^\s]*https?http 或 https://协议分隔符[^\s/$.?#]域名开始字符[^\s]*后续路径字符
4. 日期格式(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$5. 密码强度验证(至少8位,含大小写和数字)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$(?=.*[a-z])正向预查,必须包含小写字母(?=.*[A-Z])必须包含大写字母(?=.*\d)必须包含数字.{8,}至少8个字符
在各语言中使用正则
JavaScript
// 创建正则表达式
const regex = /pattern/flags; // 字面量形式
const regex2 = new RegExp('pattern', 'flags'); // 构造函数形式
// 常用方法
const str = "Hello World";
const match = str.match(/world/i); // 匹配,i flag忽略大小写
const replaced = str.replace(/hello/i, "Hi"); // 替换
const test = /world/i.test(str); // 测试是否匹配Python
import re
text = "Hello World"
pattern = r"world" # raw string
# 常用方法
match = re.search(pattern, text, re.IGNORECASE)
matches = re.findall(pattern, text, re.I)
replaced = re.sub(pattern, "Python", text, flags=re.I)Java
import java.util.regex.*;
String text = "Hello World";
Pattern pattern = Pattern.compile("world", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
System.out.println("找到匹配: " + matcher.group());
}正则表达式标志(Flags)
实用技巧和最佳实践
1. 测试工具推荐
在线测试:Regex101、RegExr
桌面工具:RegexBuddy、VS Code搜索功能
2. 性能优化建议
// 不好:过度使用.*
.*abc.*
// 好:更具体的匹配
[^abc]*abc[^abc]*
// 不好:贪婪匹配
<.*>
// 好:非贪婪匹配
<.*?>3. 调试技巧
从简单开始,逐步复杂化
使用在线测试工具实时验证
添加注释(某些支持注释的正则引擎)
(?x) # 启用注释模式
^ # 字符串开始
\d{3} # 3位数字
- # 连字符
\d{2} # 2位数字
$ # 字符串结束4. 常见陷阱
贪婪匹配:默认是贪婪的,使用
?转为非贪婪转义特殊字符:记得转义
.*+?()[]{}等性能问题:避免嵌套量词和回溯爆炸
练习题目
匹配HTML标签:
<([a-z]+)([^<]+)*(?:>(.*)<\/\1>| *\/>)提取颜色代码:
#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})匹配IP地址:
\b(?:\d{1,3}\.){3}\d{1,3}\b查找重复单词:
\b(\w+)\s+\1\b
总结
正则表达式是每个开发者都应该掌握的重要技能。虽然学习曲线稍陡峭,但一旦掌握,将极大提升你的文本处理能力。记住:
循序渐进:从基础开始,逐步学习复杂模式
多练习:实际应用是最好的学习方式
善用工具:使用在线测试工具辅助学习
注重可读性:复杂的正则要添加注释或拆分
掌握正则表达式,让你在文本处理领域游刃有余!