正则表达式入门(2)——使用元字符

元字符也就是在正则表达式里有特殊含义的字符。例如,英文句号“.”就是一个元字符,还有“[”和“]”等等。

1.再谈转义字符

因为这些元字符有特殊含义,因此不能用"["来表示“[”本身,就要使用转义字符,也就是用“\”反斜杠,所以如果要匹配“[”符号,要用"\["才行。

例如,要查找(myArray)[0]这段字符串,那么正则语法是:

(myArray)\[0\]

当然用正则匹配这个有点小题大做。

2.匹配空白字符

空白元字符

所谓空白元字符包括:

  • 回退(Backspace键): [\b]
  • 换页符: \f
  • 换行符: \n
  • 回车符: \r
  • 制表符(tab键): \t
  • 垂直制表符: \v

PS:空格(space)就是空格,后面再说。

不同操作系统对换行的标记是不同的。在windows系统中,换行标记是**\r\n**,也就是“回车+换行”的组合。在Unix或Linux系统则只需要\n换行符即可,因此要匹配空白行就是\n\n。如果要同时匹配windows和unix的换行,那么就包含一个可选的\r或者\n。

3.转义字符的差异性

.和[都是元字符,但前提是没有被转义。f和n也是元字符,但前提是被进行了转义。因此统一理解的话,“\n”这个“整体”理解为元字符。

4.匹配特定的字符类别

匹配特定的字符类别(例如所有数字类、所有空白类等等),使用专门的“字符类”,或者称为“类元字符”。

4.1匹配数字

\d:匹配任意一个数字,等价于[0-9]
\D:匹配任一非数字,等价于[^0-9]

4.2匹配字母和数字

字母与数字组合类是很常见的,还包括一个“_”(下划线)字符。因此有专门的转义字符表示这一类:

\w:任意字母数字或下划线字符,等价于[A-Za-z0-9_]
\W:与上面相反,等价于[^A-Za-z0-9_]

4.3匹配空白字符

包括前面列出的空白元字符和空格:

\s:匹配任意空白字符,等价于[\f\n\r\t\v ](注意里面在最后有个空格)
\S:与上面相反的匹配

4.4匹配十六进制或八进制数值

这个一般不常用。十六进制用\x转义,八进制用\0转义。举例:

\x0A //对应ASCII码中的10,也就是换行符,等价于\n
\011,对应ASCII中的9,即制表符,等价于\t

4.5使用POSIX字符类

POSIX 是 Portable Operating System Interface (可移植操作系统接口) 的缩写,它是一系列标准,确保操作系统之间的移植性。

下面是POSIX元字符(Metacharacter)和相关匹配(Matches):

1
2
3
4
5
6
7
8
9
10
11
12
[[:alnum:]]	字母和数字
[[:alpha:]]	字母
[[:blank:]]	空格和制表符
[[:cntrl:]]	控制字符
[[:digit:]]	数字
[[:graph:]]	非空白字符
[[:lower:]]	小写字母
[[:print:]]	类似[[:graph:]],但是包含空白字符
[[:punct:]]	标点符号
[[:space:]]	空白字符
[[:upper:]]	大写字母
[[:xdigit:]] 十六进制中容许出现的数字(例如 0-9a-fA-f)

这东西一般不常用,了解一下就行了,但有时候是很方便的,比如刚才匹配颜色值,[0-9A-Fa-f]其实就是所有十六进制的数字,那么用[:xdigit:]替换也一样。但是,并不是所有正则表达式中都支持POSIX语法。

下一部分是重复匹配。

留言