正则表达式


引言:
正则表达式

正则表达式

Regular expression 正则表达式,一组由字母数字符号组成的特殊文本

功能: 从文本中找出让你满意的句子

1. 基本匹配

正则表达式可以理解为 正在执行搜索的格式

例如:在The fat cat sat on the mat.搜索the

我们就可以输入”the”来查找到the,大小写敏感,不会匹配到The

2. 元字符

注:以下所有的元字符都使用这句来举例

1
The fat cat sat on the mat

.

句号匹配任意的单个字符,换行符除外

例如输入.at,会匹配fat,cat,sat,mat

[]

匹配方括号内的任意内容,

例如[the]此时匹配所有的单个字母,匹配The内的he,匹配fat内的t等等

再如,输入[Tthe]会匹配the和The

输入[.]就代表句号

[^]

匹配除了方括号内的任意字符,即上个例子的补集

例如输入[^f]at会匹配cat,sat,mat

*

匹配>=0个重复在*之前的字符

输入[a-z]*会匹配所有的小写字母

输入s*cats*s代表空格,会匹配所有零个或多个空格开头结尾的cat

+

匹配>=1个重复的+号前的字符

输入c.+t会匹配cat sat on the mat,以c开头以t结尾中间至少有一个字符的字符串

?

标记?之前的字符为可选,

例如f?at会匹配fat和所有的at

{n,m}

匹配num个大括号之前的字符,其中num>=n&&num<=m

例如,输入表达式[0-9]{2,3}匹配最少两位最多三位的数字

第二个可以不必输入[0-9]{2,}代表至少两位数字

如果逗号都省略,则表示固定重复的次数,[0-9]{3}代表三位数字

(xyz) 特征标群

字符集,匹配与xyz完全相等的字符串

输入(at)*匹配连续出现0个或多个的ab

|

或运算符,匹配符号前或后的字符

例如输入a|t,a和t都会被匹配

我们还可以在()中用字符|表示或

例如(f|c)at只能匹配,fat,cat

反斜杠,转义字符,用来匹配保留字符

例如,输入 . 匹配语句最后的句号

^

从开始行开始匹配

例如, 在 abc 中使用表达式 ^a 会得到结果 a. 但如果使用 ^b 将匹配不到任何结果. 因为在字符串 abc 中并不是以 b 开头.

$

从末端开始匹配

例如, (at.)$ 匹配以 at. 结尾的字符串

3.简写字符集

. 匹配除换行符外的所有字符

w 匹配所有数字字母,等同于[0-9a-zA-Z_]

W 匹配所有符号,即非字母数字,即[^w]

d 匹配数字

D 匹配非数字,等同于[^d]

s 匹配所有空格字符,等同于[tnfrp{z}]

S 匹配所有非空格字符,[^s]

f 匹配换页符

n 匹配换行符

r 匹配回车符

t 匹配制表符

v 匹配一个垂直制表符

p 匹配CR/LF,等同于(rn),用来匹配DOS行终止符

4. 零宽度断言(前后预查)

例句:The fat cat sat on the mat.

?=正先行断言

表示第一部分表达式之后必须跟着?=..定义的表达式

定义一个正先行断言要使用 (),在括号内部使用一个问号和等号: (?=…)

例如:表达式(T|t)he(?=sfat),只会匹配第一个The,因为只有第一个The后跟着(空格)fat

?!负先行断言

表达式其后不跟随着断言中定义的格式

例如:表达式(T|t)he(?!sfat),只会匹配第二个the,因为第一个The后跟着(空格)fat

?<=正后发断言

其前跟随着断言中定义的格式

(?<=(T|t)hes)(fat|mat)会找出fat和mat

?<!负后发断言

其前不跟随着断言中定义的格式

(?<!(T|t)hes)(cat)只会匹配cat

5. 标志

标志也叫模式修正符, 因为它可以用来修改表达式的搜索结果. 这些标志可以任意的组合使用, 它也是整个正则表达式的一部分.

i忽略大小写

修饰语 i 用于忽略大小写.

例如, 表达式 /The/gi 表示在全局搜索 The,

在后面的 i 将其条件修改为忽略大小写, 则变成搜索 the 和 The, g 表示全局搜索.

g全局搜索

修饰符 g 常用于执行一个全局搜索匹配

即(不仅仅返回第一个匹配的, 而是返回全部).

例如, 表达式 /.(at)/g 表示搜索 任意字符(除了换行) + at, 并返回全部结果

m多行修饰符

多行修饰符 m 常用于执行一个多行匹配.

像之前介绍的 (^,$)用于检查格式是否是在待检测字符串的开头或结尾. 但我们如果想要它在每行的开头和结尾生效, 我们需要用到多行修饰符 m.

例如, 表达式 /at(.)?$/gm表示小写字符 a 后跟小写字符 t , 末尾可选除换行符外任意字符. 根据 m 修饰符, 现在表达式匹配每行的结尾.

1
2
3
4
"/.at(.)?$/gm" => The fat
cat sat
on the mat.
// 匹配到fat sat mat

贪婪匹配与惰性匹配

正则表达式默认采用贪婪匹配模式,

在该模式下意味着会匹配尽可能长的子串。

我们可以使用 ? 将贪婪匹配模式转化为惰性匹配模式。

1
2
"/(.*at)/" => The fat cat sat on the mat. 
// 匹配所有
1
2
"/(.*?at)/" => The fat cat sat on the mat. 
// 匹配The fat