《学习正则表达式》

Overview

本笔记按照人民邮电出版社的《学习正则表达式》进行随笔记录,主打简洁。

一、什么是正则表达式

本章主要讲了一个案例——匹配北美电话号

  • 直接用内容本身

707-827-7019
  • 用方括号+匹配数字:[0-9]就是 0 到 9,和[0123456789]一样

[0-9] [0-9] [0-9]-[0-9] [0-9] [0-9]-[0-9] [0-9] [0-9] [0-9]
  • 用\d代表数字

\d\d\d-\d\d\d-\d\d\d\d
  • 用\D代表非数字(处理“-”)

\d\d\d\D\d\d\d\D\d\d\d\d
  • 用.匹配任意字符(处理“-”)

\d\d\d.\d\d\d.\d\d\d\d
  • 使用量词(-?,代表有 0 个或 1 个“-”)

    • ?:0 或 1 个

    • +:1 或多个

    • *:0 或多个

\d{3}-? \d{3}-? \d{4}
(\d{3,4}[.-]? )+
(\d{3}[.-]? ){2}\d{4}
  • 可以带括号,也可以不带括号的版本

    • ^:出现在正则表达式起始位置或者竖线(|)之后的脱字符^,表示电话号码会出现在一行的起始位置;

    • ^\(\d{3}\):带括号的三个数字

    • ^\d{3}[.-]?:不带括号的三个数字

    • ^(\(\d{3}\)|^\d{3}[.-]?:带不带括号都行的三个数字

    • ^(\(\d{3}\)|^\d{3}[.-]? )?:带不带括号都行的三个数字,并且“带不带括号都行的三个数字”也可以省略

    • [.-]​?:匹配一个可选的点号或连字符

^(\(\d{3}\)|^\d{3}[.-]? )? \d{3}[.-]? \d{4}$

二、简单的模式匹配

本章看梳理了上一章用到的方法

  1. 匹配字符串字面值:就是直接用内容本身,默认区分大小写

  2. 匹配数字:\d 就是 [0-9] 就是 [0123456789]

    1. 用括号更方便,比如只想匹配0 和 1:[01]

    2. \d适合匹配所有数字的情况,更简短

  3. 匹配非数字

    1. \D 就是 [^0-9] 或者 [^\d]

    2. \D会匹配空格、标点符号(引号、连字符、反斜杠、方括号)等字符

  4. 匹配单词和非单词字符

    1. \w只匹配字母、数字和下划线,在英语中等价于 [_a-zA-Z0-9]

    2. \W 在英语中等价于 [^_a-zA-Z0-9]

  5. 字符简写式整理

    字符简写式
    描 述

    \a

    报警符

    [\b]

    退格字符

    \c x

    控制字符

    \d

    数字字符

    \D

    非数字字符

    \o xxx

    字符的八进制值

    \w

    单词字符

    \W

    非单词字符

    \0

    空字符

    \x xx

    字符的十六进制值

    \u xxx

    字符的Unicode值

  6. 匹配空白符:

    1. \s,会匹配空格,\t,\n,\r四种

    2. \S匹配非空白,也就是[^ \t\r\n]

  7. 所有的匹配空白符

    1. \f 对应描述为换页符;

    2. \h 对应描述为水平空白符;

    3. \H 对应描述为非水平空白符;

    4. 对应描述为换行符;

    5. 对应描述为回车符;

    6. \s 对应描述为空白符;

    7. \S 对应描述为非空白符;

    8. 对应描述为水平制表符;

    9. \v 对应描述为垂直制表符;

    10. \V 对应描述为非垂直制表符。

  8. 匹配任意字符.

    1. 比如匹配八个符号,可以........也可以.{8}

    2. 匹配单词边界用\b,不消耗任何字符,比如,\b\w{7}\b,就是一个长度为 7 的单词

    3. 匹配零个或多个字符:.* 相当于 [^\n][^\n\r]

    4. 点号也可以与表示“一个或多个”的量词(+)连用:.+

三、边界

最后更新于

这有帮助吗?