正则表达式
一、概述
正则表达式是一种表达文本模式的方法。我们通常会定义一个正则表达式规则,然后用这个规则来对一些字符串进行匹配。比如我们定义了一个表示邮件地址的正则表达式,然后我们使用这个正则表达式对用户输入的字符串进行匹配,看这个字符串是不是一个邮件地址。
二、字面量字符与元字符
组成正则表达式字符串的所有字符被分为两类:字面量字符与元字符。
- 字面量字符:它就表示字符的字面量,比如正则表达式
a
就匹配字符串a
。正则比表达式abcb
就匹配字符串abcb
,这些字符没有代表什么特殊的含义。 - 元字符:这些字符不匹配他们字面量本身,他们有特殊的含义。如正则表达式中点号
.
意思并不是匹配字符.
,而是匹配所有除换换行符外的所有字符。如果要匹配元字符的字面量字符,则需要使用转移符\
对这个元字符转义。如\.
就会匹配字符.
而不是除换行符外的所有字符。
正则表达式中的元字符有: .
,\
,?
,+
,*
,()
,[]
,{}
,^
,$
,|
,-
等。
三、元字符详解
.
:表示匹配除换行符外的所有字符。\
:表示转义,如果要匹配元字符中有特殊含义的字符,则要使用转义。?
:表示前面的一个模式出现0次或1次。+
:表示前面的一个模式出现1次或多次。*
:表示前面的一个模式出现0次或多次。()
:表示组匹配。比如abc+
可以匹配字符串abcc
。因为这里对于+
来说他前面的模式就是c
,那么c+
表示有一个或者多个c
,因此abc
,abcc
,abccc
都可以。但是如果我们想让+
作用于abc
呢,那么可以使用组匹配()
将abc
作为一个组:(abc)+
。这样就会匹配abcabc
或者abcabcabc
等等了。- 如果想匹配但是不获取这个组那么使用
(?:)
。如(?:abc)
;
- 如果想匹配但是不获取这个组那么使用
[]
:表示匹配的字符的集合,注意三种用法:[abc]
:表示匹配字面量a
或b
或c
。- 可以使用连字符,
[a-c]
:也是表示匹配a
或b
或c
。 - 可以使用脱字符
^
,[^abc]
: 表示匹配除a
,b
,c
之外的其他字符。
{}
:表示前面的一个模式重复的次数。abc{5}
:表示它前面的一个模式c
出现的次数是5次。abc{2,5}
:表示它前面的一个模式c
出现的次数是2到5次(注意逗号之间不能有空格)。(abc){5}
:表示它前面的模式abc
出现的次数是5次。(abc){2,5}
:表示它前面的模式abc
出现的次数是2到5次。
^
:有两种不同的用法:^
在元字符[]
里。如果是第一个字符,那么表示匹配除了中括号里面的字符外其他字符。如果不是,那么表示匹配字面量^
。- 如果
^
不在元字符[]
里面,那么他只能在整个正则表达式的开头,表示匹配由^
后面接的第一个模式开头的字符串。
$
:表示正则的末尾。|
:表示或。-
:在元字符[]
里面表示范围,如果不在这个元字符里面那么表示字面量-
三、预定义模式
预定义模式是一些常见模式的简写方式。
\d
匹配一个0-9之间的任意数字,相当于[0-9]
。\D
匹配一个所有0-9以外的字符,相当于[^0-9]
。\w
匹配一个任意的字母或数字或下划线,相当于[A-Za-z0-9_]
。\W
匹配一个除所有字母和数字和下划线以外的字符,相当于[^A-Za-z0-9_]
。\s
匹配一个空格(包括换行符、制表符、空格符等),相等于[ \t\r\n\v\f]
。\S
匹配一个非空格的字符,相当于[^ \t\r\n\v\f]
。\b
匹配词的边界。\B
匹配非词边界,即在词的内部。
四、贪婪模式
对于用来设定某个模式出现的次数的三个量词元字符?
,+
和*
,默认情况下他们的匹配规则是最大可能匹配,也就是说他们会匹配到下一个字符不满足匹配规则为止。这个种匹配规则被称为贪婪模式。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 杰布是谁!