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)。
  • 性能问题:复杂的正则表达式可能效率较低,避免过度嵌套或不必要的贪婪匹配。
相关推荐
lagelangri6663 小时前
数据库连接池以及HikariCP使用
数据库·oracle
意疏4 小时前
平替MongoDB:金仓多模数据库助力电子证照国产化实践
数据库·mongodb
gsfl4 小时前
Redis 持久化机制
数据库·redis·缓存
老朋友此林5 小时前
一文快速入门 MongoDB 、MongoDB 8.2 下载安装、增删改查操作、索引、SpringBoot整合 Spring Data MongoDB
数据库·mongodb·springboot
炬火初现6 小时前
SQL——子查询
数据库·sql
semantist@语校6 小时前
语校网500所里程碑:日本语言学校数据库的标准化与可追溯机制
大数据·数据库·人工智能·百度·语言模型·oracle·github
野犬寒鸦6 小时前
从零起步学习Redis || 第五章:利用Redis构造分布式全局唯一ID
java·服务器·数据库·redis·分布式·后端·缓存
yenggd6 小时前
QoS之流量整形配置方法
网络·数据库·华为
陪你在童年7 小时前
EXCEL根据类别分页预览或者直接生成PDF
数据库