引言:
正则表达式
正则表达式
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 |
"/.at(.)?$/gm" => The fat |
贪婪匹配与惰性匹配
正则表达式默认采用贪婪匹配模式,
在该模式下意味着会匹配尽可能长的子串。
我们可以使用 ?
将贪婪匹配模式转化为惰性匹配模式。
1 |
"/(.*at)/" => The fat cat sat on the mat. |
1 |
"/(.*?at)/" => The fat cat sat on the mat. |
近期评论