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)。
  • 性能问题:复杂的正则表达式可能效率较低,避免过度嵌套或不必要的贪婪匹配。
相关推荐
IvorySQL41 分钟前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·1 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德1 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫1 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i1 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星2 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20082 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql