正则表达式 – 实用示例大全
以下是正则表达式在实际开发中最常见的应用场景,涵盖验证、提取、替换等。每例包含正则模式、说明、测试字符串和匹配/替换结果,帮助你快速理解和应用。
1. 常见验证类
| 场景 | 正则表达式 | 说明 | 测试字符串 | 结果 |
|---|---|---|---|---|
| 中国大陆手机号 | /^1[3-9]\d{9}$/ | 以1开头,第二位3-9,共11位数字 | “13812345678” | 匹配 |
| 邮箱地址(常用版) | /^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/ | 支持常见邮箱格式 | “test@example.com” | 匹配 |
| 身份证号(18位) | /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$/ | 严格校验出生日期和校验码 | “110101199003077890” | 匹配 |
| IPv4 地址 | /^((25[0-5]|2[0-4]\d|1\d{2}|\d{1,2})\.){3}(25[0-5]|2[0-4]\d|1\d{2}|\d{1,2})$/ | 每个段0-255 | “192.168.1.1” | 匹配 |
| 十六进制颜色值 | /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i | 支持 #FFF 和 #FFFFFF | “#ff00ff” | 匹配 |
2. 提取类(常结合分组使用)
| 场景 | 正则表达式 | 说明 | 测试字符串 | 提取结果 |
|---|---|---|---|---|
| 提取URL中的域名 | /(?:https?:\/\/)?(?:www\.)?([^\/:\?]+)/i | 捕获组1为域名 | “https://www.example.com/path” | “example.com” |
| 提取所有图片src | /<img[^>]*src=["']([^"']+)["']/gi | 全局忽略大小写 | HTML文本 | 所有src值 |
| 提取日期(多种格式) | /((\d{4}-\d{2}-\d{2})|(\d{2}\/\d{2}\/\d{4})|(\d{2}-\d{2}-\d{4}))/ | 分支匹配三种格式 | “今天是2025-12-25” | “2025-12-25” |
| 提取金额(带¥或$) | /(?<=[$¥])\d+(\.\d{2})?/ | 正向后瞻提取数字部分 | “$99.99 或 ¥100” | “99.99”、”100″ |
3. 替换类
| 场景 | 正则 + 替换字符串 | 说明 | 原字符串 | 替换后 |
|---|---|---|---|---|
| 日期格式转换(YYYY-MM-DD → MM/DD/YYYY) | /(\d{4})-(\d{2})-(\d{2})/g → '$2/$3/$1' | 使用捕获组反向引用 | “2025-12-25” | “12/25/2025” |
| 千位分隔符添加 | /(?<=\d)(?=(\d{3})+(?!\d))/g → ',' | 环视断言插入逗号 | “1234567890” | “1,234,567,890” |
| 脱敏手机号(中间4位*) | /(1[3-9]\d)\d{4}(\d{4})/g → '$1****$2' | 保留前后段 | “13812345678” | “138****5678” |
| 去除HTML标签 | /<[^>]+>/g → '' | 移除所有标签 | “Hello World“ | “Hello World” |
4. 高级实用示例
| 场景 | 正则表达式 | 说明 |
|---|---|---|
| 密码强度验证(8-20位,必须含大小写字母、数字) | /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,20}$/ | 多个正向前瞻组合检查 |
| 匹配成对HTML标签(同一标签名) | /<([a-z]+)[^>]*>.*?</\1>/i | 反向引用标签名(注意:不处理嵌套) |
| 匹配重复单词(文章查重) | /\b(\w+)\b\s+\1\b/gi | 全局忽略大小写匹配如 “the the” |
| 提取CSS中的px值 | /\b(\d+)px\b/gi | 提取所有像素值 |
| 匹配中文字符 | /[\u4e00-\u9fa5]+/g | 提取或验证中文 |
5. 综合实战:解析日志行
假设日志格式:
2025-12-25 10:30:45 INFO [user:admin] Login success from 192.168.1.100
提取各部分:
/^(\d{4}-\d{2}-\d{2})\s(\d{2}:\d{2}:\d{2})\s([A-Z]+)\s\[user:([^]]+)\]\s(.*)\sfrom\s(\d+\.\d+\.\d+\.\d+)$/
- 组1: 日期 “2025-12-25”
- 组2: 时间 “10:30:45”
- 组3: 级别 “INFO”
- 组4: 用户 “admin”
- 组5: 消息 “Login success”
- 组6: IP “192.168.1.100”
这些示例覆盖了80%以上的日常正则需求。你可以直接复制使用,或根据具体语言(如JavaScript、Python、Java)稍作调整。
如果你有特定场景(如解析JSON、处理Excel、爬虫规则等),欢迎提供细节,我可以为你定制最优正则表达式!