《正则表达式必知必会》的读书笔记。
第一章 正则表达式介绍
用正则表达式语言创建的,匹配和处理文本的字符串。
正则表达式语言不是一种独立的语言,它是被其他工具或编程语言实现了的。
不同的工具和编程语言,对正则表达式的实现略有不同,所以在使用正则表达式之前,要根据当前的工具或编程语言,首先了解它支持的正则表达式的语法和元字符。
验证某个模式能不能获得预期的匹配结果并不困难,困难的是如何保证它不匹配到不想要的东西。
正则表达式的两种用途:
搜索和替换
第二章 匹配单个字符
2-1 匹配纯文本
纯文本也是一个正则表达式
2-1-1 有多个匹配结果
返回一个数组等形式,把所有的匹配结果找出来的机制,因编程语言而不同。
2-1-2 区分大小写
正则表达式默认是区分大小写的,但是也支持不区分大小写的匹配操作,因编程语言而不同。
2-2 匹配任意字符
. 匹配任何一个单个的字符(包含.本身)
2-3 匹配特殊字符
.在正则表达式里有特殊含义,如果要表示.本身,就要对它转义,转义字符是\。
第三章 匹配一组字符
3-1 匹配多个字符中的某一个
利用元字符[和]定义字符集合。匹配该字符集合的任意某一个字符。
3-2 利用字符集合区间
在[ ]中间把字符集合的所有字符一个一个列出来。
在[ ]中间使用元字符-来定义集合区间。(按照ASCII字符表的顺序)
常见的字符集合区间:
[0-9], [a-z], [A-Z], [A-Za-z0-9]
3-3 取非匹配
除了字符集合里的字符,其他字符都可以匹配。使用元字符^。
第四章 使用元字符
4-1 对特殊字符进行转义
元字符有特殊含义,所以不能表示它自身。要想表示元字符自身,要使用转义字符\。\也是元字符,所以\的转义是\\。
元字符分两种,一种是用来匹配文本的,另一种是正则表达式的语法要求的。
4-2 匹配空白字符
[\b] 回退一个字符
\r 回车符
\n 换行符
\f 换页符
\t 制表符
\v 垂直制表符
4-3 匹配特定的字符类别
常用的字符集合可以用特殊元字符来代替。这称作字符类。
4-3-1 匹配数字(与非数字)
\d = [0-9]
\D = [^0-9]
4-3-2 匹配字母和数字(与非字母和数字)
\w = [0-9A-Za-z_]
\W = [^0-9A-Za-z_]
4-3-3 匹配空白字符(与非空白字符)
\s = [\f\r\n\t\v]
\S = [^\f\r\n\t\v]
注意,\s和\S都不包括退格字符[\b]。
4-3-4 匹配十六进制或八进制数值
十六进制数值用前缀\x来表示。例如,\x0A对应于ASCII字符10,换行符,等价于\n。
八进制数值用前缀\0来表示。例如,\011对应于ASCII字符9,制表符,等价于\t。
4-4 使用POSIX字符类
[:alnum:] = [0-9A-Za-z_]
[:alpha:] = [A-Za-z]
[:blank:] = [\t ]
[:digit:] = [0-9]
[:lower:] = [a-z]
[:upper:] = [A-Z]
[:xdigit:] = [0-9A-Fa-f]
例如在正则表达式里要表示任意一个小写字母,可以用[[:lower:]],外层的中括号代表定义字符集合,里层的中括号是POSIX字符类的一部分。
第五章 重复匹配
5-1 有多少个匹配
5-1-1 匹配一个或多个字符
在字符(或字符集合)后面加上+字符,匹配一个或多个字符。
5-1-2 匹配零个或多个字符
在字符(或字符集合)后面加上*字符,匹配零个或多个字符。
5-1-3 匹配零个或一个字符
在字符(或字符集合)后面加上?字符,匹配零个或一个字符。
5-2 匹配的重复次数
重复次数用来给出。
5-2-1 为重复匹配次数设定一个精确的值
[\d]代表三位数字,即000到999的其中一个。
5-2-2 为重复匹配次数设定一个区间
,最少重复2次,最多重复4次。
? 等价于
5-2-3 匹配“至少重复多少次”
,表示最少重复三次
+ 等价于
5-3 防止过度匹配
+和*都是贪婪型元字符。
懒惰型元字符的写法,是给贪婪型元字符加一个?后缀。
+ +? * *? ?
第六章 位置匹配
6-1 边界
6-2 单词边界
\b,用来匹配一个单词的开始或结尾。单词前后都要加。
\B,不匹配一个单词边界。
6-3 字符串边界
定义字符串开头的^,定义字符串结尾的$。
分行匹配模式,(?m)。很多正则表达式都不支持。
第七章 使用子表达式
7-1 什么是子表达式
+,*等只能作用于它前面的单个字符。
把子表达式当作一个独立元素来使用。
子表达式用(和)括起来。
7-2 子表达式
是正则表达式里的或操作符,它会把两边各作为一个整体看待,经常和子表达式结合使用。
7-3 子表达式的嵌套
子表达式的基本用途之一:把一组字符编组为一个字符集合。重复匹配。
子表达式的分组,基于从左到右,从外向内的基本原则。
第八章 回溯引用
子表达式的基本用途之二:定义回溯引用。
8-1 回溯引用有什么用
文本匹配
文本替换
8-2 回溯引用匹配
回溯引用只能用来引用模式里的子表达式。
回溯引用匹配通常从1开始计数,\1代表第一个子表达式。通常\0代表整个正则表达式。
8-3 回溯引用在替换操作中的应用
替换操作需要用到两个正则表达式:一个用来给出搜索模式,另外一个用来给出匹配文本的替换模式,回溯引用可以跨模式使用。
在替换模式里,$1代表第一个子表达式,$2代表第二个子表达式。
8-3-1 大小写转换
有些正则表达式,支持使用下列元字符对大小写进行转换。
\l 把下一个字符转换为小写
\u 把下一个字符转换为大写
\U \E 把它们之间的字符转换为大写
\L \E 把他们之间的字符转换为小写
第九章 前后查找
9-1 前后查找
子表达式的另外一个应用。
任何一个子表达式都可以被改写成向前查找或向后查找。
有时候成为零宽度匹配操作。
匹配本身只是用于确定正确的匹配位置,并不是匹配结果的一部分。即只匹配不返回。
向前查找和向后查找。
9-2 向前查找
XX(?=yy)等号后面跟要匹配的文本,但是返回结果里不包含。
一个表达式可以包含多个向前查找,可以出现在表达式的任意位置。
9-3 向后查找
(?
向前查找模式的长度是可变的,可以包含.+之类的元字符。向后查找模式长度是固定的,不能包含.+等元字符。
9-4 向前查找和向后查找结合使用
只返回向前查找和向后查找之间的匹配文本。
9-5 对前后查找取非
正向前查找和正向后查找,返回匹配结果。
负向前查找和负向后查找,返回不匹配结果。
用!取非,它代替等号。
(?!)
第十章 嵌入条件
在表达式的内部嵌入条件处理功能。
领取专属 10元无门槛券
私享最新 技术干货