正则表达式基础知识

Posted 好读书不如好记笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式基础知识相关的知识,希望对你有一定的参考价值。

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


第一章 正则表达式介绍

用正则表达式语言创建的,匹配和处理文本的字符串。

正则表达式语言不是一种独立的语言,它是被其他工具或编程语言实现了的。

不同的工具和编程语言,对正则表达式的实现略有不同,所以在使用正则表达式之前,要根据当前的工具或编程语言,首先了解它支持的正则表达式的语法和元字符。

验证某个模式能不能获得预期的匹配结果并不困难,困难的是如何保证它不匹配到不想要的东西。

正则表达式的两种用途:

搜索和替换

 

第二章 匹配单个字符

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]{3}代表三位数字,即000到999的其中一个。

5-2-2 为重复匹配次数设定一个区间

{2,4},最少重复2次,最多重复4次。

? 等价于{0,1}

5-2-3 匹配“至少重复多少次”

{3,},表示最少重复三次

+ 等价于{1,}

5-3 防止过度匹配

+和*都是贪婪型元字符。

懒惰型元字符的写法,是给贪婪型元字符加一个?后缀。

+ +? * *? {n,} {n,}?

 

第六章 位置匹配

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 向后查找

(?<=yy)XX等号后面跟要匹配的文本,但是返回结果里不包含。

向前查找模式的长度是可变的,可以包含.+之类的元字符。向后查找模式长度是固定的,不能包含.+等元字符。

9-4 向前查找和向后查找结合使用

只返回向前查找和向后查找之间的匹配文本。

9-5 对前后查找取非

正向前查找和正向后查找,返回匹配结果。

负向前查找和负向后查找,返回不匹配结果。

用!取非,它代替等号。

(?!)

(?<!)

 

第十章 嵌入条件

在表达式的内部嵌入条件处理功能。


以上是关于正则表达式基础知识的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式之原理篇

正则表达式基础知识

[基础]正则表达式

Linux 基础正则表达式

正则表达式基础---转自 Python正则表达式指南 前边

python正则表达式---正则表达式基础