《正则表达式必知必会》读书笔记

快速过一遍

匹配单个字符

字符 . 可以匹配任何一个单个的字符

因为字符 . 在正则表达式中有特殊的含义,如果想搜索 . 的话,需要进行转义: \.

匹配一组字符

[] 定义一个字符集合

- 字符区间

取非 ^

元字符

在正则表达式里有特殊含义的字符,比如 . 表示匹配任意一个字符,[ 表示一个字符集合的开始

因为这些元字符在正则表达式里有特殊含义,所以无法用来代表本身。因此这种情况就需要转义

空白字符

元字符 说明
\s 任何一个空白字符
\S 任何一个非空白字符

数字

元字符 说明
\d 任何一个数字字符
\D 任何一个非数字字符

字母和数字

元字符 说明
\w 任何一个字母数字字符(大小写均可)或下划线字符,等价于 [a-zA-Z0-9_]
\W 任何一个非字母数字字符(大小写均可)或下划线字符,等价于 [^a-zA-Z0-9_]

重复匹配

  • + 匹配一个或多个字符
  • * 匹配零个或多个字符
  • ? 匹配零个或一个字符
  • 匹配的重复次数
    • {数字} 设定一个精确的值
    • {数字, 数字} 设定一个区间
    • {数字, } 至少重复多少次

防止过度匹配

所谓“贪婪型”,在进行匹配时,会尽可能地从一段文本的开头一直匹配到这段文本的末尾。而不是从这段文本的开头开始碰到第一个匹配为止

贪婪型元字符 懒惰型元字符
* *?
+ +?
{n, } {n, }?

位置匹配

\b 单词边界

^ 字符串开头

$ 字符串结尾

子表达式

() 括起来

命令总结

  • 匹配单个字符
    • .
    • 转义 \.
  • 匹配一组字符
    • [] 定义一个字符集合
    • - 字符区间
    • 取非 ^
  • 元字符
    • \s 空白字符
    • \d 数字
    • \w 字母、数字和下划线
  • 重复匹配
    • + 匹配一个或多个字符
    • * 匹配零个或多个字符
    • ? 匹配零个或一个字符
    • 匹配的重复次数
      • {数字} 设定一个精确的值
      • {数字, 数字} 设定一个区间
      • {数字, } 至少重复多少次
    • 防止过度匹配
      • 贪婪型元字符
      • 懒惰型元字符
  • 位置匹配
    • \b 单词边界
    • ^ 字符串开头
    • $ 字符串结尾