📚 基础概念回顾
元字符(特殊字符)
-
.- 匹配任意单个字符(除换行符) -
\d- 匹配数字,等价于[0-9] -
\w- 匹配单词字符(字母、数字、下划线) -
\s- 匹配空白字符(空格、制表符等) -
\D、\W、\S- 匹配对应小写字母的非字符集
位置锚点
-
^- 匹配字符串开始 -
$- 匹配字符串结束 -
\b- 单词边界(重要概念)
量词(重复次数)
-
*- 0次或多次 -
+- 1次或多次 -
?- 0次或1次 -
{n}- 精确n次 -
{n,}- 至少n次 -
{n,m}- n到m次
🎯 正则表达式练习题
题目一:匹配精确单词
编写正则表达式,精确匹配单词 "user"(只匹配这个完整的单词,不匹配像 "username" 或 "user123" 这样的部分)
测试字符串:
The user logged in. This is a username. Another user.
题目二:匹配电话号码格式
匹配固定电话号码格式:
- 以
0开头 - 后面跟着2到3位数字
- 然后是一个连字符
- - 最后是7到8位数字
示例:021-12345678 或 010-87654321 应该被匹配
题目三:匹配邮箱用户名
匹配邮箱的用户名部分(@之前的部分),要求:
- 由字母、数字、下划线组成
- 长度在3到10个字符之间
- 不能以数字开头
示例:abc_123、user_name 应该匹配,但 12abc、ab 不应该匹配
题目四:匹配日期格式
匹配 YYYY-MM-DD 格式的日期:
- YYYY:4位数字
- MM:01-12
- DD:01-31
- 各部分用连字符
-连接
示例:2023-12-25、1990-01-01 应该匹配
题目五:提取HTML标签内容
提取 <p> 标签中的文本内容(不包含标签本身)
示例:在 <p>Hello World</p> 中,匹配 Hello World
题目六:匹配整数(可正可负)
匹配整数(可能包含正负号):
- 以可选的正负号开头(
+、-或没有) - 后面是1位或多位数字
- 必须是完整的字符串
示例:123、-456、+789 应该匹配
题目七:匹配简单密码
验证密码格式:
- 以字母开头
- 包含字母、数字、下划线
- 长度6-12个字符
示例:Abc_123、password_1 应该匹配
题目八:匹配颜色十六进制码
匹配十六进制颜色码:
- 以
#开头 - 后面是3位或6位十六进制数字(字母A-F不区分大小写)
示例:#abc、#A1B2C3、#fff 应该匹配
题目九:匹配版本号格式
匹配软件版本号格式:
- 格式为
X.Y.Z - X、Y、Z都是1位或多位数字
- 用点号分隔
示例:1.0.0、2023.12.25、3.14.159 应该匹配
题目十:匹配中文姓名
匹配2-4个中文字符组成的姓名:
示例:张三、李四、王小明 应该匹配
📝 题目答案与解析
题目一:匹配精确单词
答案:\buser\b
解析:
-
\b匹配单词边界(单词开始或结束的位置) -
user匹配字面文本 - 这个表达式会匹配 "user" 但不会匹配 "username" 中的 "user"
题目二:匹配电话号码格式
答案:^0\d{2,3}-\d{7,8}$
解析:
-
^匹配字符串开始 -
0匹配字面数字0 -
\d{2,3}匹配2到3位数字 -
-匹配连字符 -
\d{7,8}匹配7到8位数字 -
$匹配字符串结束
题目三:匹配邮箱用户名
答案:^[a-zA-Z]\w{2,9}$
解析:
-
^匹配字符串开始 -
[a-zA-Z]匹配一个字母(不能是数字) -
\w{2,9}匹配2到9个单词字符(字母、数字、下划线) - 总长度:1 + (2-9) = 3-10个字符
题目四:匹配日期格式
答案:^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
解析:
-
^\d{4}-匹配4位年份和连字符 -
(0[1-9]|1[0-2])匹配月份:01-09 或 10-12 -
(0[1-9]|[12]\d|3[01])匹配日期:01-09 或 10-29 或 30-31 -
$匹配字符串结束
题目五:提取HTML标签内容
答案:<p>(.*?)</p>
解析:
-
<p>匹配开始标签 -
(.*?)分组捕获标签间的任意内容(非贪婪模式) -
</p>匹配结束标签 - 实际使用时需要提取第一个分组的内容
题目六:匹配整数(可正可负)
答案:^[+-]?\d+$
解析:
-
^匹配字符串开始 -
[+-]?可选的正负号(0次或1次) -
\d+1位或多位数字 -
$匹配字符串结束
题目七:匹配简单密码
答案:^[a-zA-Z]\w{5,11}$
解析:
-
^[a-zA-Z]以字母开头 -
\w{5,11}后面5-11个单词字符 - 总长度:1 + (5-11) = 6-12个字符
题目八:匹配颜色十六进制码
答案:^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$
解析:
-
^#以#开头 -
([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})3位或6位十六进制字符 -
$字符串结束
题目九:匹配版本号格式
答案:^\d+\.\d+\.\d+$
解析:
-
^字符串开始 -
\d+1位或多位数字 -
\.转义的点号(字面意义) -
$字符串结束
题目十:匹配中文姓名
答案:^[\u4e00-\u9fff]{2,4}$
解析:
-
^字符串开始 -
[\u4e00-\u9fff]匹配中文字符(Unicode范围) -
{2,4}长度2到4个字符 -
$字符串结束
正则表达式学习沉淀:从入门到实战
📚 基础概念回顾
元字符(特殊字符)
-
.- 匹配任意单个字符(除换行符) -
\d- 匹配数字,等价于[0-9] -
\w- 匹配单词字符(字母、数字、下划线) -
\s- 匹配空白字符(空格、制表符等) -
\D、\W、\S- 匹配对应小写字母的非字符集
位置锚点
-
^- 匹配字符串开始 -
$- 匹配字符串结束 -
\b- 单词边界(重要概念)
量词(重复次数)
-
*- 0次或多次 -
+- 1次或多次 -
?- 0次或1次 -
{n}- 精确n次 -
{n,}- 至少n次 -
{n,m}- n到m次
🎯 正则表达式练习题
题目一:匹配精确单词
编写正则表达式,精确匹配单词 "user"(只匹配这个完整的单词,不匹配像 "username" 或 "user123" 这样的部分)
测试字符串:
The user logged in. This is a username. Another user.
题目二:匹配电话号码格式
匹配固定电话号码格式:
- 以
0开头 - 后面跟着2到3位数字
- 然后是一个连字符
- - 最后是7到8位数字
示例:021-12345678 或 010-87654321 应该被匹配
题目三:匹配邮箱用户名
匹配邮箱的用户名部分(@之前的部分),要求:
- 由字母、数字、下划线组成
- 长度在3到10个字符之间
- 不能以数字开头
示例:abc_123、user_name 应该匹配,但 12abc、ab 不应该匹配
题目四:匹配日期格式
匹配 YYYY-MM-DD 格式的日期:
- YYYY:4位数字
- MM:01-12
- DD:01-31
- 各部分用连字符
-连接
示例:2023-12-25、1990-01-01 应该匹配
题目五:提取HTML标签内容
提取 <p> 标签中的文本内容(不包含标签本身)
示例:在 <p>Hello World</p> 中,匹配 Hello World
题目六:匹配整数(可正可负)
匹配整数(可能包含正负号):
- 以可选的正负号开头(
+、-或没有) - 后面是1位或多位数字
- 必须是完整的字符串
示例:123、-456、+789 应该匹配
题目七:匹配简单密码
验证密码格式:
- 以字母开头
- 包含字母、数字、下划线
- 长度6-12个字符
示例:Abc_123、password_1 应该匹配
题目八:匹配颜色十六进制码
匹配十六进制颜色码:
- 以
#开头 - 后面是3位或6位十六进制数字(字母A-F不区分大小写)
示例:#abc、#A1B2C3、#fff 应该匹配
题目九:匹配版本号格式
匹配软件版本号格式:
- 格式为
X.Y.Z - X、Y、Z都是1位或多位数字
- 用点号分隔
示例:1.0.0、2023.12.25、3.14.159 应该匹配
题目十:匹配中文姓名
匹配2-4个中文字符组成的姓名:
示例:张三、李四、王小明 应该匹配
📝 题目答案与解析
题目一:匹配精确单词
答案:\buser\b
解析:
-
\b匹配单词边界(单词开始或结束的位置) -
user匹配字面文本 - 这个表达式会匹配 "user" 但不会匹配 "username" 中的 "user"
题目二:匹配电话号码格式
答案:^0\d{2,3}-\d{7,8}$
解析:
-
^匹配字符串开始 -
0匹配字面数字0 -
\d{2,3}匹配2到3位数字 -
-匹配连字符 -
\d{7,8}匹配7到8位数字 -
$匹配字符串结束
题目三:匹配邮箱用户名
答案:^[a-zA-Z]\w{2,9}$
解析:
-
^匹配字符串开始 -
[a-zA-Z]匹配一个字母(不能是数字) -
\w{2,9}匹配2到9个单词字符(字母、数字、下划线) - 总长度:1 + (2-9) = 3-10个字符
题目四:匹配日期格式
答案:^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
解析:
-
^\d{4}-匹配4位年份和连字符 -
(0[1-9]|1[0-2])匹配月份:01-09 或 10-12 -
(0[1-9]|[12]\d|3[01])匹配日期:01-09 或 10-29 或 30-31 -
$匹配字符串结束
题目五:提取HTML标签内容
答案:<p>(.*?)</p>
解析:
-
<p>匹配开始标签 -
(.*?)分组捕获标签间的任意内容(非贪婪模式) -
</p>匹配结束标签 - 实际使用时需要提取第一个分组的内容
题目六:匹配整数(可正可负)
答案:^[+-]?\d+$
解析:
-
^匹配字符串开始 -
[+-]?可选的正负号(0次或1次) -
\d+1位或多位数字 -
$匹配字符串结束
题目七:匹配简单密码
答案:^[a-zA-Z]\w{5,11}$
解析:
-
^[a-zA-Z]以字母开头 -
\w{5,11}后面5-11个单词字符 - 总长度:1 + (5-11) = 6-12个字符
题目八:匹配颜色十六进制码
答案:^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$
解析:
-
^#以#开头 -
([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})3位或6位十六进制字符 -
$字符串结束
题目九:匹配版本号格式
答案:^\d+\.\d+\.\d+$
解析:
-
^字符串开始 -
\d+1位或多位数字 -
\.转义的点号(字面意义) -
$字符串结束
题目十:匹配中文姓名
答案:^[\u4e00-\u9fff]{2,4}$
解析:
-
^字符串开始 -
[\u4e00-\u9fff]匹配中文字符(Unicode范围) -
{2,4}长度2到4个字符 -
$字符串结束
💡 学习心得总结
学习路径回顾
- 基础概念:从元字符、量词、位置锚点开始
- 简单匹配:单词匹配、数字匹配
- 复杂结构:分组、选择、字符范围
- 实际应用:日期、密码、URL等真实场景
关键突破点
- 单词边界 \b 的理解和应用
- 量词的正确使用:+、*、?、{n,m}
- 分组和选择处理复杂逻辑
- 转义字符处理特殊字符
实用技巧
- 从简单开始,逐步增加复杂度
- 使用在线工具测试和调试
- 分步骤构建复杂表达式
- 理解非贪婪匹配的应用场景