基本正则表达式¶
字符通配元字符¶
.
:匹配除\n
之外的任何单个字符。要匹配包括\n
在内的任何字符,请使用像(.|\n)
的模式[]
:匹配指定集合或范围内的任意单个字符[abc]
:匹配a/b/c
中的任意一个字符[0-9]
、[[:digit:]]
:匹配0到9任意单个数字[a-z]
、[[:lower:]]
:匹配单个小写字母[A-Z]
、[[:upper:]]
:匹配单个大写字母[[:alpha:]]
:匹配单个大写或小写字母[[:alnum:]]
:匹配单个字母或数字[[:space:]]
:匹配单个空格字符[[:punct:]]
:匹配单个标点符号
[^]
:匹配指定集合或范围外的任意单个字符[^a-z]
、[^[:lower:]]
:匹配小写字母之外的单个字符[^A-Z]
、[^[:upper:]]
:匹配大写字母之外的单个字符[^0-9]
、[^[:digit:]]
:匹配数字之外的单个字符[^a-z0-9]
:匹配字母和数字之外的单个字符[^[:alpha:]]
:匹配字母之外的单个字符[^[:alnum:]]
:匹配字母和数字之外的单个字符[^[:space:]]
:匹配空格字符之外的单个字符[^[:punct:]]
:匹配标点符号之外的单个字符
x|y
:匹配x或yz|food
:匹配z
或food
(z|f)ood
:匹配zood
或food
\cx
:匹配由x指明的控制字符;x的值必须为A-Z
或a-z
之一。否则,将c
视为一个原义的c
字符\d
:匹配一个数字字符,等价于[0-9]
\D
:匹配一个非数字字符,等价于[^0-9]
\f
:匹配一个换页符,等价于\x0c
和\cL
\n
:匹配一个换行符,等价于\x0a
和\cJ
\r
:匹配一个回车符,等价于\x0d
和\cM
\t
:匹配一个制表符,等价于\x09
和\cI
\v
:匹配一个垂直制表符,等价于\x0b
和\cK
\s
:匹配任何不可见字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v]
\S
:匹配任何可见字符,等价于[^\f\n\r\t\v]
\w
:匹配包括下划线的任何单词字符,类似但不等价于[A-Za-z0-9_]
,这里的单词
字符使用Unicode字符集
\W
:匹配任何非单词字符\xn
:匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长\x41
:匹配A
\x041
:等价于\x04&1
\un
:匹配n,其中n是一个用四个十六进制数字表示的Unicode字符\u00A9
:匹配版权符号©
\n
:标识一个八进制转义值或一个向后引用。如果\n
之前至少存在n个获取的子表达式(即至少存在n个分组),则n为向后引用。否则,如果n为八进制数字0-7
,则n为一个八进制转义值\nm
:标识一个八进制转义值或一个向后引用。如果\nm
之前至少存在nm个获取的子表达式(即至少存在nm个分组),则nm为向后引用。如果\nm
之前至少存在n个获取的子表达式,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字0-7,则nm将匹配八进制转义值nm。\nml
:如果n为八进制数字0-7,且m和l均为八进制数字0-7,则匹配八进制转义值nml。
次数通配元字符¶
作用对象:作用于紧挨着元字符的前面普通单字符、被元字符匹配到的单字符或字符串
*
:匹配前面的子表达式出现任意次- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
zo*
匹配z
以及zoo
;等价于{0,}
- 匹配字符串:使用
()
将字符串括起来,注意此处需要转义;例如z\(xo\)*
- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
\+
:匹配前面的子表达式出现一次或多次- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
zo\+
匹配zo
以及zoo
,但不能匹配z
;等价于\{1,\}
- 匹配字符串:使用
()
将字符串括起来,注意此处需要转义;例如z\(xo\)\+
- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
\?
:匹配前面的子表达式出现零次或一次- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
zo\?
匹配zo
以及z
,但不能匹配zoo
- 匹配字符串:使用
()
将字符串括起来,注意此处需要转义;例如do\(es\)\?
匹配does
或does
中的do
;等价于\{0,1\}
- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
\{n\}
:n是一个非负整数,匹配前面的子表达式出现n次- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
o\{2\}
不能匹配Bob
中的o
,但是能匹配food
中的两个o
- 匹配字符串:使用
()
将字符串括起来,注意此处需要转义;例如do\(es\)\{2\}
- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
\{n,\}
:n是一个非负整数,匹配前面的子表达式至少出现n次- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
o\{2,\}
不能匹配Bob
中的o
,但能匹配foooood
中的所有o
。o\{1,\}
等价于o+
。o\{0,\}
则等价于o*
- 匹配字符串:使用
()
将字符串括起来,注意此处需要转义;例如do\(es\)\{2,\}
- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
\{n,m\}
:m和n均为非负整数,其中n<=m。匹配前面的子表达式至少出现n次至多出现m次- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
o\{1,3\}
匹配fooooood
中的前三个o
。o\{0,1\}
等价于o\?
请注意逗号和两个数之间不能有空格 - 匹配字符串:使用
()
将字符串括起来,注意此处需要转义;例如do\(es\)\{1,3\}
- 匹配单字符:默认是匹配前一个紧挨次数通配元字符的字符;例如,
注意:
- 当
?
紧跟在任何一个其他限制符*、\+、\?、\{n\}、\{n,\}、\{n,m\}
后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串oooo
,o\+?
将匹配单个o
,而o\+
将匹配所有o
- 当
位置锚定元字符¶
作用对象:作用于紧挨着元字符的前面或后面普通单字符、被元字符匹配到的单字符或字符串
^
:锚定输入字符串的开始位置(即锚定行首)。如果设置了RegExp
对象的Multiline
多行匹配属性,^
也锚定\n
或\r
之后的位置$
:锚定输入字符串的结束位置(即锚定行尾)。如果设置了RegExp
对象的Multiline
多行匹配属性,$
也锚定\n
或\r
之前的位置^$
表示空白行
\b
:锚定一个单词边界(首部或尾部),也就是指单词和空格间的位置er\b
可以匹配never
中的er
,但不能匹配verb
中的er
\ber\b
只能匹配er
\B
:锚定非单词边界,即不是首部也不是尾部er\B
能匹配verb
中的er
,但不能匹配never
中的er
\<
:锚定单词(word)首部\>
:锚定单词(word)尾部\<the\>
能够匹配字符串for the wise
中的the
,但是不能匹配字符串otherwise
中的the
分组引用元字符¶
作用对象:被pattern匹配到的字符集合(pattern是由字符通配元字符、次数通配元字符、位置锚定元字符组合而成)
\(pattern\)
:匹配pattern并获取这一匹配。并将匹配到的字符保存到一个临时区域Matches集合
或VBScript中的SubMatches集合
(一个正则表达式中最多可以保存9个)- 在shell环境中可以使用
\1
到\9
基于分组字符串的位置对分组字符串整体依次进行引用(依次引用前面被自左往右的第1到第9个左括号以及与之对应的右括号中的模式匹配到的内容) - 在JavaScript环境中可以使用
$0
到$9
基于分组字符串的位置对分组字符串整体依次进行引用(依次引用前面被自左往右的第1到第9个左括号以及与之对应的右括号中的模式匹配到的内容)
- 在shell环境中可以使用
\(?:pattern\)
:匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不对匹配到的内容做临时存储供以后使用。这在使用或字符(|)
来组合一个模式时很有用industr\(?:y|ies\)
就是一个比industry|industries
更简略的表达式
\(?=pattern\)
:正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,不对匹配到的内容做临时存储供以后使用Windows\(?=95|98|NT|2000\)
能匹配Windows2000
中的Windows
,但不能匹配Windows3.1
中的Windows
。预查不消耗字符,也就是说,在一个匹配发生后,立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
\(?!pattern\)
:正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,不对匹配到的内容做临时存储供以后使用Windows\(?!95|98|NT|2000\)
能匹配Windows3.1
中的Windows
,但不能匹配Windows2000
中的Windows
。预查不消耗字符,也就是说,在一个匹配发生后,立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
\(?<=pattern\)
:反向肯定预查,与正向肯定预查类拟,只是方向相反\(?<=95|98|NT|2000\)Windows
能匹配2000Windows
中的Windows
,但不能匹配3.1Windows
中的Windows
\(?<!pattern\)
:反向否定预查,与正向否定预查类拟,只是方向相反\(?<!95|98|NT|2000\)Windows
能匹配3.1Windows
中的Windows
,但不能匹配2000Windows
中的Windows
温馨提示¶
- 所有没有被
\
转义的元字符如果想表示字符本身含义,则需要添加\
转义符进行转义 - 所有已经被
\
转义的元字符如果想表示字符本身含义,则需要去掉\
转义符取消转义