正则表达式使用元字符匹配特定的字符或字符类型(三)
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字符类本身的组成部分