扩展正则表达式¶
字符通配元字符¶
.
:匹配除\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,}
+
:匹配前面的子表达式出现一次或多次zo+
匹配zo
以及zoo
,但不能匹配z
;等价于{1,}
?
:匹配前面的子表达式出现零次或一次do(es)?
匹配does
或does
中的do
;等价于{0,1}
{n}
:n是一个非负整数,匹配前面的子表达式出现n次o{2}
不能匹配Bob
中的o
,但是能匹配food
中的两个o
{n,}
:n是一个非负整数,匹配前面的子表达式至少出现n次o{2,}
不能匹配Bob
中的o
,但能匹配foooood
中的所有o
。o{1,}
等价于o+
。o{0,}
则等价于o*
{n,m}
:m和n均为非负整数,其中n<=m。匹配前面的子表达式至少出现n次至多出现m次o{1,3}
匹配fooooood
中的前三个o
。o{0,1}
等价于o?
请注意逗号和两个数之间不能有空格
注意:
- 当
?
紧跟在任何一个其他限制符*、+、?、{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