本文举例介绍了正则表达式的常用情况,通过分类整理和详细示例,讲解了如何使用这套精密模式描述语言进行文本匹配。
前情提要:通过往期文章《【Linux·基础篇】Shell 基础|正则表达式:文本模式的精密描述语言(一)》的内容,我们了解了正则表达式的核心概念和语法规则。
| 电子邮箱 | ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ | |
| 手机号码 | ^1[3-9]\d{9}$ | |
| 身份证号 | ^\d{17}[\dXx]$ | |
| 日期(YYYY-MM-DD) | ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ | |
| 时间(HH:MM:SS) | ^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$ | |
| 整数 | ^-?\d+$ | |
| 浮点数 | ^-?\d+(?:\.\d+)?$ | |
| 用户名 | ^[a-zA-Z0-9_-]{3,16}$ | |
| 密码强度 | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ | |
| IP 地址 | ^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$ |
| 提取邮箱 | [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,} | |
| 提取 URL | https?://[^\s]+ | |
| 提取电话 | \d{3}-\d{3}-\d{4} | |
| 提取颜色代码 | #[0-9A-Fa-f]{6}|#[0-9A-Fa-f]{3} | |
| 提取中文 | [\u4e00-\u9fff]+ | |
| 提取金额 | \$\d+(?:\.\d{2})? | |
| 提取 HTML 标签 | <([^>]+)> | |
| 提取图片链接 | \.(?:jpg|jpeg|png|gif) | |
| 提取数字 | \d+(?:\.\d+)? |
| 删除 HTML 标签 | <[^>]*> | ||
| 合并多余空格 | \s+ | ||
| 删除空行 | ^\s*$ | ||
| 删除行尾空格 | \s+$ | ||
| 驼峰转下划线 | ([a-z])([A-Z]) | \1_\2 | userNameuser_name |
| 下划线转驼峰 | _([a-z]) | \U\1 | user_nameuserName |
| 添加千位分隔符 | (\d)(?=(\d{3})+(?!\d)) | \1, | 12345671,234,567 |
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$分解解析:
^:从字符串开始[A-Za-z0-9._%+-]+:用户名部分(1 个或多个字符)@:@符号[A-Za-z0-9.-]+:域名部分\.:点号(需要转义)[A-Za-z]{2,}:顶级域名(至少 2 个字母)$:到字符串结束匹配示例:
user@example.comname.last@company.co.ukuser@com(缺少点号和域名)user@example.(顶级域名不能是点)(\d{4})-(\d{2})-(\d{2})分解解析:
(\d{4}):捕获组 1,4 位数字(年)-:分隔符(\d{2}):捕获组 2,2 位数字(月)-:分隔符(\d{2}):捕获组 3,2 位数字(日)匹配示例:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$分解解析:
^:字符串开始(?=.*[a-z]):正向预查,确保至少一个小写字母(?=.*[A-Z]):正向预查,确保至少一个大写字母(?=.*\d):正向预查,确保至少一个数字.{8,}:至少 8 个任意字符$:字符串结束匹配示例:
Password123password(缺少大写字母和数字)PASSWORD1(缺少小写字母)Pass1(长度不足 8 位)正则表达式是一门需要实践的语言。开始时可能会觉得符号难以理解,但随着练习,你会逐渐发现它的强大之处,并熟练使用。需要注意的是,每个复杂的正则表达式都是由简单的部分组合而成的,构建匹配时,要从基础开始,逐步构建。
此番炼器手札,炉火尚未全熄。若道友观之有趣,或可暂留此间,结一尘缘。待下回开炉铸器,新得感悟,必先与同道分享。