10.2 刷题知识点总结(1) ---- 正则表达式

核心概念与语法

正则表达式由普通字符 (如字母、数字)和元字符(具有特殊含义的字符)组成。以下是常用元字符和语法:

1. 基础匹配
  • .:匹配任意单个字符(除换行符 \n
    • 例:a.b 匹配 "acb"、"a1b",不匹配 "ab"、"a\nb"
  • []:匹配括号内的任意一个字符
    • 例:[abc] 匹配 "a"、"b" 或 "c";[0-9] 匹配任意数字
  • [^]:匹配不在括号内的任意字符(取反)
    • 例:[^0-9] 匹配非数字字符
  • |:逻辑"或",匹配两边的任意一个表达式
    • 例:cat|dog 匹配 "cat" 或 "dog"
2. 量词(匹配次数)
  • *:匹配前面的元素 0 次或多次
    • 例:a* 匹配 ""(空)、"a"、"aa"、"aaa" 等
  • +:匹配前面的元素 1 次或多次
    • 例:a+ 匹配 "a"、"aa",不匹配 ""
  • ?:匹配前面的元素 0 次或 1 次 (可选)
    • 例:a? 匹配 "" 或 "a"
  • {n}:匹配前面的元素 恰好 n 次
    • 例:a{3} 仅匹配 "aaa"
  • {n,}:匹配前面的元素 至少 n 次
    • 例:a{2,} 匹配 "aa"、"aaa" 等
  • {n,m}:匹配前面的元素 n 到 m 次 (包含 n 和 m)
    • 例:a{1,3} 匹配 "a"、"aa"、"aaa"
3. 位置匹配(锚点)
  • ^:匹配字符串的开头
    • 例:^abc 匹配以 "abc" 开头的字符串(如 "abcd")
  • $:匹配字符串的结尾
    • 例:xyz$ 匹配以 "xyz" 结尾的字符串(如 "axyz")
  • \b:匹配单词边界(单词与非单词字符的位置)
    • 例:\bcat\b 匹配独立的 "cat",不匹配 "category" 中的 "cat"
4. 转义字符

如果需要匹配元字符本身(如 .*( 等),需用 \ 转义:

  • 例:a\.b 匹配 "a.b"(而非 "acb");\* 匹配 "*"
5. 预定义字符集
  • \d:匹配任意数字(等价于 [0-9]
  • \D:匹配非数字(等价于 [^0-9]
  • \w:匹配字母、数字、下划线(等价于 [a-z A-Z 0-9 _]
  • \W:匹配非单词字符(等价于 [^ a-z A-Z 0-9 _]
  • \s:匹配空白字符(空格、制表符 \t、换行符 \n 等)
  • \S:匹配非空白字符

常用示例

  1. 验证手机号(中国大陆)
    ^1[3-9]\d{9}$

    • 以 "1" 开头,第二位是 3-9,后面跟 9 位数字。
  2. 验证邮箱
    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

  3. 提取 HTML 标签中的内容
    <title>(.*?)</title>

    • 用括号 () 定义分组,.*? 非贪婪匹配标签内的内容。
  4. 替换字符串中的空格

    \s+ 匹配一个或多个空格,替换为单个空格:

java 复制代码
 "hello   world".replaceAll("\\s+", " ")

输出结果:

java 复制代码
  "hello world"

注意事项

  • 贪婪匹配 vs 非贪婪匹配 :默认是贪婪模式(尽可能多匹配),加 ? 切换为非贪婪模式(尽可能少匹配)。
    例:a.*b 匹配 "aabxb" 中的 "aabxb",而 a.*?b 匹配 "aab"。
  • 不同语言的细微差异 :Java 中需用双反斜杠 \\(如 \\d),而 Python、JavaScript 中用单反斜杠 \(如 \d)。
  • 性能问题:复杂的正则表达式可能效率较低,避免过度嵌套或不必要的贪婪匹配。
相关推荐
humors22117 分钟前
服务端开发案例(不定期更新)
java·数据库·后端·mysql·mybatis·excel
Wang's Blog28 分钟前
MySQL: 服务器性能优化全面指南:参数配置与数据库设计的最佳实践
服务器·数据库·mysql
码农101号42 分钟前
Mysql主从架构的搭建
数据库·mysql·架构
cqsztech1 小时前
ORACLE数据库中如何找到过去某个时间某个表被谁修改了
数据库·oracle
好记忆不如烂笔头abc1 小时前
sql评估存储的速度和稳定性
数据库·sql
小鹏linux1 小时前
《openGauss安全架构与数据全生命周期防护实践:从技术体系到行业落地》
数据库·opengauss·gaussdb
朝新_2 小时前
【实战】动态 SQL + 统一 Result + 登录校验:图书管理系统(下)
xml·java·数据库·sql·mybatis
装不满的克莱因瓶2 小时前
什么是脏读、幻读、不可重复读?Mysql的隔离级别是什么?
数据库·mysql·事务·隔离级别·不可重复读·幻读·脏读
aramae2 小时前
MySQL数据库入门指南
android·数据库·经验分享·笔记·mysql
Apache IoTDB3 小时前
时序数据库 IoTDB 集成 MyBatisPlus,告别复杂编码,简化时序数据 ORM 开发
数据库·struts·servlet·时序数据库·iotdb