正则表达式学习沉淀:(实题+解题思路+答案)

正则表达式学习沉淀:(实题+解题思路+答案)

📚 基础概念回顾

元字符(特殊字符)

  • . - 匹配任意单个字符(除换行符)
  • \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-12345678010-87654321 应该被匹配

题目三:匹配邮箱用户名

匹配邮箱的用户名部分(@之前的部分),要求:

  • 由字母、数字、下划线组成
  • 长度在3到10个字符之间
  • 不能以数字开头

示例abc_123user_name 应该匹配,但 12abcab 不应该匹配

题目四:匹配日期格式

匹配 YYYY-MM-DD 格式的日期:

  • YYYY:4位数字
  • MM:01-12
  • DD:01-31
  • 各部分用连字符 - 连接

示例2023-12-251990-01-01 应该匹配

题目五:提取HTML标签内容

提取 <p> 标签中的文本内容(不包含标签本身)

示例:在 <p>Hello World</p> 中,匹配 Hello World

题目六:匹配整数(可正可负)

匹配整数(可能包含正负号):

  • 以可选的正负号开头(+- 或没有)
  • 后面是1位或多位数字
  • 必须是完整的字符串

示例123-456+789 应该匹配

题目七:匹配简单密码

验证密码格式:

  • 以字母开头
  • 包含字母、数字、下划线
  • 长度6-12个字符

示例Abc_123password_1 应该匹配

题目八:匹配颜色十六进制码

匹配十六进制颜色码:

  • # 开头
  • 后面是3位或6位十六进制数字(字母A-F不区分大小写)

示例#abc#A1B2C3#fff 应该匹配

题目九:匹配版本号格式

匹配软件版本号格式:

  • 格式为 X.Y.Z
  • X、Y、Z都是1位或多位数字
  • 用点号分隔

示例1.0.02023.12.253.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-12345678010-87654321 应该被匹配

题目三:匹配邮箱用户名

匹配邮箱的用户名部分(@之前的部分),要求:

  • 由字母、数字、下划线组成
  • 长度在3到10个字符之间
  • 不能以数字开头

示例abc_123user_name 应该匹配,但 12abcab 不应该匹配

题目四:匹配日期格式

匹配 YYYY-MM-DD 格式的日期:

  • YYYY:4位数字
  • MM:01-12
  • DD:01-31
  • 各部分用连字符 - 连接

示例2023-12-251990-01-01 应该匹配

题目五:提取HTML标签内容

提取 <p> 标签中的文本内容(不包含标签本身)

示例:在 <p>Hello World</p> 中,匹配 Hello World

题目六:匹配整数(可正可负)

匹配整数(可能包含正负号):

  • 以可选的正负号开头(+- 或没有)
  • 后面是1位或多位数字
  • 必须是完整的字符串

示例123-456+789 应该匹配

题目七:匹配简单密码

验证密码格式:

  • 以字母开头
  • 包含字母、数字、下划线
  • 长度6-12个字符

示例Abc_123password_1 应该匹配

题目八:匹配颜色十六进制码

匹配十六进制颜色码:

  • # 开头
  • 后面是3位或6位十六进制数字(字母A-F不区分大小写)

示例#abc#A1B2C3#fff 应该匹配

题目九:匹配版本号格式

匹配软件版本号格式:

  • 格式为 X.Y.Z
  • X、Y、Z都是1位或多位数字
  • 用点号分隔

示例1.0.02023.12.253.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}
  • 分组和选择处理复杂逻辑
  • 转义字符处理特殊字符

实用技巧

  • 从简单开始,逐步增加复杂度
  • 使用在线工具测试和调试
  • 分步骤构建复杂表达式
  • 理解非贪婪匹配的应用场景

转载请说明出处内容投诉
CSS教程网 » 正则表达式学习沉淀:(实题+解题思路+答案)

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买