《学习正则表达式》
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}$
二、简单的模式匹配
本章看梳理了上一章用到的方法
-
匹配字符串字面值:就是直接用内容本身,默认区分大小写
-
匹配数字:
\d就是[0-9]就是[0123456789]- 用括号更方便,比如只想匹配0 和 1:
[01] - 用
\d适合匹配所有数字的情况,更简短
- 用括号更方便,比如只想匹配0 和 1:
-
匹配非数字
\D就是[^0-9]或者[^\d]\D会匹配空格、标点符号(引号、连字符、反斜杠、方括号)等字符
-
匹配单词和非单词字符
\w只匹配字母、数字和下划线,在英语中等价于[_a-zA-Z0-9]\W在英语中等价于[^_a-zA-Z0-9]
-
字符简写式整理
字符简写式 描 述 \a报警符 [\b]退格字符 \c x控制字符 \d数字字符 \D非数字字符 \o xxx字符的八进制值 \w单词字符 \W非单词字符 \0空字符 \x xx字符的十六进制值 \u xxx字符的Unicode值 -
匹配空白符:
\s,会匹配空格,\t,\n,\r四种\S匹配非空白,也就是[^ \t\r\n]
-
所有的匹配空白符
\f对应描述为换页符;\h对应描述为水平空白符;\H对应描述为非水平空白符;- 对应描述为换行符;
- 对应描述为回车符;
\s对应描述为空白符;\S对应描述为非空白符;- 对应描述为水平制表符;
\v对应描述为垂直制表符;\V对应描述为非垂直制表符。
-
匹配任意字符
.- 比如匹配八个符号,可以
........也可以.{8} - 匹配单词边界用
\b,不消耗任何字符,比如,\b\w{7}\b,就是一个长度为 7 的单词 - 匹配零个或多个字符:
.*相当于[^\n]或[^\n\r] - 点号也可以与表示“一个或多个”的量词(+)连用:
.+
- 比如匹配八个符号,可以