正则表达式使用元字符匹配特定的字符或字符类型(三)

1、再谈转义

之前学习的元字符回顾:

/ 转义元字符

[ 字符集合的开始

] 字符结合的结束

-是一个特殊的元字符,它只有出现在字符集合[ 和 ] 之间的时候才是元字符。在字符集合以外的地方,-只是一个普通字符

.(dot) 用于匹配任意的单个字符

^用于排除字符集合

观察两个正则表达式

myArray[0]

myArray\[0\]

前者只匹配到myArray0,后者匹配到myArray[0]

原因在于:正则表达式里[ 和 ] 是用来定义字符集合的,而不是[ 和 ] 本身

正则表达:

myArray\[[0-9]\]

myArray\[[0-9]\]可以匹配到myArray[0]、myArray[1] 、…、 myArray[8]、myArray[9]

这也就不难理解在Java或者Python等等其他的语言中,指定windows本地路径的时候为什么要用\\了

正常的windows路径是这样的:D:\develop\software\home

当我们在大部分编程语言或者脚本语言中却是这样使用的D:\\develop\\software\\home

2、匹配空白字符

空白元字符表

元字符

说明

[\b]

回退(并删除)一个字符(Backspace)

\f

换页符号-------f为page的首字母

\n

换行符

\r

回车符----return的首字母

\t

制表符(Table)

\v

垂直制表符

\r\n匹配一个“回车(carriage return)+ 换行(line feed)“组合是很多操作系统的结束标记

\r\n\r\n是两条记录直接的空白行

Windows文本行结束标记:\r\n

Unix/Linux和Mac OS匹配空白行仅仅需要\n即可

理想的正则表达式应该适应上面两种情况:包含一个可选的\r和一个必须被匹配的\n

3、匹配特定的字符类型

a、匹配数字

数字元字符表

元字符

说明

\d

任何一个数字字符(等价于[0-9])

\D

任何一个非数字字符(等价于[^0-9])

利用数字元字符表示正则表达的等价

myArray\[[0-9]\]
myArray\[[0123456789]\]
myArray\[[\d]\]
b、匹配字母数字

字母数字元字符

元字符

说明

\w

任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-z0-9_])

\W

任何一个非字母数字或下划线字符(等价于[^a-zA-z0-9_])

4、匹配空白字符

空白字符元字符

元字符

说明

\s

任何一个空白字符(等价于[\f\n\r\t\v])

\S

任何一个非空空白符(等价于[^\f\n\r\t\v])

注意:用来匹配退格符的[\b]元字符不在\s的覆盖范围内,\S也没有将其排除

5、匹配16进制或8进制

这个知识可能在我整个人生中都不会用到,但是必须要了解

16进制\x0A(对应ASCII字符10,也就是换行符)等价于\n

8进制\011(对应ASCII字符9,也就是制表符)等价于\t

6、使用POSIX

POSIX是一种特殊的标准字符类集,也是许多正则表达式实现都支持的一种简写方式

POSIX字符类

字符类

说明

[:alnum:]

任何一个字母或数字(等价于[a-zA-z0-9])

[:alpha:]

任何一个字母(等价于[a-zA-Z])

[:blank:]

空白或制表符(等价于[\t ])----字母t后面有一个空格

[:cntrl:]

ASCII控制字符(ASCII 0到31,再加上ASCII 127)

[:digit:]

任何一个数字(等价于[0-9])

[:graph:]

和[:print:],但不包括空格

[:lower:]

任何一个小写字母(等价于[a-z])

[:print:]

任何 一个可打印字符

[:punct:]

既不属于[:alnum:],也不属于[:cntrl:]的任何一个字符

[:space:]

任何一个空白字符,包括空格(等价于[\f\n\r\t\v ])—字母v后面有一个空格

[:upper:]

任何一个大写字母

[:xdigit:]

任何一个16进制数字(等价于[a-fA-F0-9])

注意:JavaScript不支持在正则表达式里使用POSIX字符类

使用POSIX字符类的时候必须以 [[ 开头,以 ]] 结束,外层的[ 和 ]字符用来定义一个字符集合,内层的[ 和 ]字符是POSIX字符类本身的组成部分