当前位置:首页>Linux>【Linux·基础篇】Shell 基础|正则表达式:文本模式的精密描述语言(二)

【Linux·基础篇】Shell 基础|正则表达式:文本模式的精密描述语言(二)

  • 2026-08-22 08:49:09
【Linux·基础篇】Shell 基础|正则表达式:文本模式的精密描述语言(二)

本文举例介绍了正则表达式的常用情况,通过分类整理和详细示例,讲解了如何使用这套精密模式描述语言进行文本匹配。

前情提要:通过往期文章《【Linux·基础篇】Shell 基础|正则表达式:文本模式的精密描述语言(一)》的内容,我们了解了正则表达式的核心概念和语法规则。

一、常用正则表达式模式速查表

数据验证类

用途
正则表达式
说明
电子邮箱^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
基本邮箱格式验证
手机号码^1[3-9]\d{9}$
中国大陆手机号(11 位,1 开头)
身份证号^\d{17}[\dXx]$
18 位身份证号(简单验证)
日期(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$
24 小时制时间
整数^-?\d+$
正整数或负整数
浮点数^-?\d+(?:\.\d+)?$
包含小数的数字
用户名^[a-zA-Z0-9_-]{3,16}$
3-16 位(字母、数字、下划线、短横线)
密码强度^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
至少 8 位,包含大小写字母和数字
IP 地址^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
IPv4 地址格式

数据提取类

用途
正则表达式
提取内容
提取邮箱[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}
文本中的所有邮箱
提取 URLhttps?://[^\s]+
HTTP/HTTPS 链接
提取电话\d{3}-\d{3}-\d{4}
美国电话号码格式
提取颜色代码#[0-9A-Fa-f]{6}|#[0-9A-Fa-f]{3}
十六进制颜色值
提取中文[\u4e00-\u9fff]+
中文字符串
提取金额\$\d+(?:\.\d{2})?
美元金额
提取 HTML 标签<([^>]+)>
HTML 标签名
提取图片链接\.(?:jpg|jpeg|png|gif)
图片文件扩展名
提取数字\d+(?:\.\d+)?
整数或小数

文本处理类

用途
正则表达式
替换为
效果
删除 HTML 标签<[^>]*>
空字符串
移除所有 HTML 标签
合并多余空格\s+
空格
多个空格合并为一个
删除空行^\s*$
空字符串
移除空白行
删除行尾空格\s+$
空字符串
移除每行末尾空格
驼峰转下划线([a-z])([A-Z])\1_\2userName
 → user_name
下划线转驼峰_([a-z])\U\1user_name
 → userName
添加千位分隔符(\d)(?=(\d{3})+(?!\d))\1,1234567
 → 1,234,567

二、实例解析:理解正则表达式工作原理

示例 1:邮箱验证

^[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.com
  • • ✓ name.last@company.co.uk
  • • ✗ user@com(缺少点号和域名)
  • • ✗ user@example.(顶级域名不能是点)

示例 2:提取日期

(\d{4})-(\d{2})-(\d{2})

分解解析:

  • • (\d{4}):捕获组 1,4 位数字(年)
  • • -:分隔符
  • • (\d{2}):捕获组 2,2 位数字(月)
  • • -:分隔符
  • • (\d{2}):捕获组 3,2 位数字(日)

匹配示例:

  • • "2024-01-15" → 捕获组 1:"2024",组 2:"01",组 3:"15"

示例 3:密码强度验证

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$

分解解析:

  • • ^:字符串开始
  • • (?=.*[a-z]):正向预查,确保至少一个小写字母
  • • (?=.*[A-Z]):正向预查,确保至少一个大写字母
  • • (?=.*\d):正向预查,确保至少一个数字
  • • .{8,}:至少 8 个任意字符
  • • $:字符串结束

匹配示例:

  • • ✓ Password123
  • • ✗ password(缺少大写字母和数字)
  • • ✗ PASSWORD1(缺少小写字母)
  • • ✗ Pass1(长度不足 8 位)

三、结语:实践出真知

正则表达式是一门需要实践的语言。开始时可能会觉得符号难以理解,但随着练习,你会逐渐发现它的强大之处,并熟练使用。需要注意的是,每个复杂的正则表达式都是由简单的部分组合而成的,构建匹配时,要从基础开始,逐步构建。


此番炼器手札,炉火尚未全熄。若道友观之有趣,或可暂留此间,结一尘缘。待下回开炉铸器,新得感悟,必先与同道分享。

最新文章

随机文章