匹配任意字符的 “.”

注意

1
2
3
4
1."matches any character (expect for line terminators)"
("."可以匹配除了换行符的任意字符)
2.当要匹配诸如"."这样的特殊字符时,要用"\"来转义
如若要匹配"."

则要使用 \.

特殊字符转义

匹配一组字符

用法 使用字符集合"[]"

例一

第一个像被匹配的字符只能是n或者s

例二

区间字符

A-Z

[A-Z]

A-Z 并且 0-9


[A-Z0-9]


例三

1
2
3
取非操作
要匹配任意的非字母数字字符
则可以

[^A-Za-z0-9]


取非操作

注意

1
2
^的效果将作用于给定字符集合里的所有字符或字符区间,而
不是仅限于紧跟在^字符后面的那一个字符或字符区间

小结

1
2
3
4
5
元字符[和]用来定义一个字符集合,其含义是必须匹配该集合里的字符
之一。定义一个字符集合的具体做法有两种:一是把所有的字符都列举
出来;二是利用元字符-以字符区间的方式给出。字符集合可以用元字
符^来求非;这将把给定的字符集合强行排除在匹配操作以外——除了
该字符集合里的字符,其他字符都可以被匹配。

使用元字符

** 例一**

对特殊字符进行转义

1
2
3
4
5
提示 任何一个元字符都可以通过给它加上一个反斜杠字符(\)作
为前缀的办法来转义,能够被转义的元字符并不仅局限于我们这里提
到的那几个。
警告 配对的元字符(比如[或])不用作元字符时必须被转义,否则
正则表达式分析器很可能会抛出一个错误。

注意

1
2
3
4
5
如果你在这个正则表达式里只写出了一个\的话
你应该会看到一条出错消息。
这是因为正则表达式分析器会认为你的正则表达式不完整,
在一个完整的正则表达式里,字符\的后面永远跟着另一个字符。

例二

匹配空白字符

元字符 说明
[\b] 回退(并删除)一个字符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符

注意(一个有意思的现象)

1
2
3
4
你已经见过不少元字符了,但你注意到它们之间的差异了
吗?.和[是元字符,但前提是你没有对它们进行转义。f和n也是元字
符,但前提是你对它们进行了转义。如果你没有对f和n进行转义,它
们将被解释为普通字符,只能匹配它们本身。

例三

使用数字元字符

元字符 说明
\d 任何一个数字字符(等价于[0-9]
\D 任何一个非数字字符(等价于[^0-9]

使用数字元字符

使用数字字母元字符

元字符 说明
\w 任何一个字母数字(大小写均可)或下划线字符 等价于[0-9a-zA-Z_]
\W 任何一个非数字字母和下划线 等价于[0-9a-zA-Z_]

样例

使用数字字母元字符

注意

1
2
3
4
5
6
7
8
 在上面这个例子里,我们使用的正则表达式解决了我们的问
题。但它正确吗?请大家思考一下,为什么美国的邮政编码没有被匹
配出来?是因为它们只由数字构成、还是因为什么其他原因?
我们将不给出这个问题的答案,理由很简单——例子里的模式解决了
问题。这里的关键是正则表达式很少有对错之分(当然,前提是它们
能解决问题),我们更关心的是它们的复杂程度——而这要由模式匹
配操作的精确程度来决定;如果你需要更精确的匹配,就需要构造更
复杂的正则表达式。

例四

使用匹配空白字符的元字符


元字符 说明
\s 任何一个空字符(除了\b) 等价于[\f\t\n\v\r]
\S 任何一个非空字符 以及 \b 等价于[^\f\v\t\n\r]

使用POSIX字符类

字符类 说明
[:alnum:] 任何一个字母或数字 等价于 [0-9a-zA-Z] 注意千万不是等价于\w !!
[:alpha:] 任何一个字母 等价于[a-zA-Z]
[:blank:] 空格或者制表符 等价于[\t ] 注意\t 后有一个空格
[:cntrl:] ASCII控制字符(ASCII 0到31,再加上ASCII 127)
[:digit:] [0-9]
[:print:] 任何一个可打印字符
[:graph:] 仅仅是[:print:]不包含空格的情况
[:lower:] [a-z]
[:punct:] 既不属于[:alnum:]也不属于[:cntrl:]的任何一个字符
[:space:] 任何一个空白字符,包括空格
[:upper:] 任何一个大写字母(等价于[A-Z])
[:xdigit:] 任何一个十六进制数字(等价于[a-fA-F0-9])

注意

1
2
3
4
5
 这里使用的模式以[[开头、以]]结束(两对方括号)。这是使
用POSIX字符类所必须的。POSIX字符类必须括在[:和:]之间,我们
使用的POSIX字符类是[:xdigit:](不是:xdigit:)。外层的[和]
字符用来定义一个字符集合,内层的[和]字符是POSIX字符类本身的
组成部分。