基本正则表达式¶
字符通配元字符¶
.:匹配除\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
温馨提示¶
- 所有没有被
\转义的元字符如果想表示字符本身含义,则需要添加\转义符进行转义 - 所有已经被
\转义的元字符如果想表示字符本身含义,则需要去掉\转义符取消转义