这篇文章是我看完正则《表达式必知必会》这本书之后做的笔记,结合后面看的《精通正则表达式》这本书,修正了对《必知必会》这本书中理解不清晰甚至是书里描述不准确的地方,这也让我明白了一个道理,有的书你看不明白或许不是你的问题,很有可能就是书里面内容的问题,同一种技术相关的书籍最好多看不同的几本,因为你在这本书不理解的地方,在另一本书中或许就豁然开朗了。
元字符 | 说明 |
---|---|
g | 全局匹配 |
i | 不区分大小写 |
. | 匹配任意字符(除换行符以外的任何单个字符) |
| 用来转义特殊字符 |
元字符 | 说明 |
---|---|
[] | 字符集合,匹配该集合中的任意一个字符 |
- | (连字符)字符区间 |
以下是一些合法的连字符区间:
A-Z
,匹配从A到Z的所有大写字母。
a-z
,匹配从a到z的所有小写字母。
A-F
,匹配从A到F的所有大写字母。
A-z
,匹配从ASCII字符A到ASCII字符z的所有字母。这个模式一般不常用,因为它还包含着[和^等在ASCII字符表里排列在Z和a之间的字符。
提示 在定义一个字符区间的时候,一定要避免让这个区间的尾字符小于它的首字符(例如[3-1])。这种区间是没有意义的,而且往往会让整个模式失效。
注意 -(连字符)是一个特殊的元字符,作为元字符它只能用在
[]
之间。 在字符集合以外的地方,-只是一个普通字符,只能与-本身相匹配。因此,在正则表达式里,-字符不需要被转义。
元字符 | 说明 |
---|---|
^ | 取非匹配,匹配的是除了除了那个字符集里的其他字符。 |
^
必须放在字符集中,也就是[]
中才是取非的含义,如果放在一个字符集合的外面并位于一个模式的开头,^
将匹配字符串的开头。 详见第六章。
注意
^
的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在^
字符后面的那一个字符或字符区间。
元字符是一些在正则表达式里有着特殊含义的字符。因为元字符在正则表达式里有着特殊的含义,所以这些字符就无法用来代表它们本身,必须用
对元字符进行转义。
提示 任何一个元字符都可以通过给它加上一个反斜杠字符(
)作为前缀的办法来转义,能够被转义的元字符并不仅局限于我们这里提到的那几个。
元字符 | 说明 |
---|---|
[b] | 回退(并删除)一个字符(Backspace键) |
f | 换页符 |
n | 换行符 |
r | 回车符 |
t | 制表符 |
v | 垂直制表符 |
例子:有一组如下图所示的数据,我们需要把夹杂在这些数据里的空白行去掉
正则表达式:
rnrn
结果:
类元字符是用来代替一些常用的字符集合的特殊元字符。类元字符并不是必不可少的东西(你总是可以通过逐一列举有关字符或是通过定义一个字符区间的办法来匹配某一类字符),但用它们构造出来的正则表达式简明易懂,在实践中很有用。
下面是一些基本的类元字符的例子:
数字元字符
元字符 | 说明 |
---|---|
d | 任何一个数字字符(等价于[0-9] ) |
D | 任何一个非数字字符(等价于[^0-9] ) |
例如:
myArray[d]
是myArray[[0-9]]
的简写形式
警告 正则表达式的语法是区分字母大小写的。
d
匹配数字,D
与d
的含义刚好相反。接下来将看到的其他类元字符也是如此。
字母数字元字符
元字符 | 说明 |
---|---|
w | 任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_] ) |
W | 任何一个非字母数字字符(大小写均可)或非下划线字符(等价于[^a-zA-Z0-9_] ) |
例子:
文本
正则表达式:
wdwdwd
结果
注意 在上面这个例子里,我们使用的正则表达式解决了我们的问题。但它正确吗?请大家思考一下,为什么美国的邮政编码没有被匹配出来?是因为它们只由数字构成、还是因为什么其他原因?我们将不给出这个问题的答案,理由很简单——例子里的模式解决了问题。这里的关键是正则表达式很少有对错之分(当然,前提是它们能解决问题),我们更关心的是它们的复杂程度——而这要由模式匹配操作的精确程度来决定;如果你需要更精确的匹配,就需要构造更复杂的正则表达式。
空白字符元字符
元字符 | 说明 |
---|---|
s | 任何一个空白字符(等价于[fnrtv] ) |
S | 任何一个非空白字符(等价于[^fnrtv] ) |
注意 用来匹配退格字符的
[b]
元字符是一个特例:它不在类元字符s
的覆盖范围内,当然也就没有被排除在类元字符S
的覆盖范围外。
元字符 | 说明 |
---|---|
x | 十六进制前缀,例如x0A 对应于ASCII字符10(换行符),其效果等价于n |
|