1 正则表达式必知必会
1.1 简介
正则表达式:是一些用来匹配和处理文本的字符串。
正则表达式的使用场景主要以下两种情况:一是查找特定的信息(搜索),二是查找并编辑特定的信息(替换)。
用模式(pattern)表示实际的正则表达式。
1.2 匹配单个字符
- 匹配普通文本:正则表达式为待匹配的文本。
- 匹配任意字符:
.
字符(英文句号)可以匹配任意单个字符,如字符、字母、数字,甚至是.
字符本身。 - 匹配特殊字符:使用
转义地字符,如
.
。
1.3 匹配一组字符
- 匹配多个字符中的某一个
使用[]
定义一个字符集合,对于连续字符使用-
连字符来定义字符区间。集合内字符是OR
关系,匹配其中之一。
[A-Z]:匹配从A到Z的所有大写字母。
[a-z]:匹配从a到z的所有小写字母。
[0-9]:匹配从0到9的所有数字。
- 排除
使用元字符^
来排除字符集合里指定的那些字符,如[^0-9]
。注意,^的效果将作用于给定字符集合里的所有字符或字符区间。
1.4 使用元字符
1.4.1 元字符转义
元字符:在正则表达式里有特殊含义的字符。
转义:元字符可以通过在前面加上一个反斜杠()进行转义,这样匹配的就是该字符本身而不是特殊的元字符含义。
1.4.2 匹配空白字符
元字符大概可以分为两种:一种是用来匹配文本的(如.
),另一种是正则表达式语法的组成部分(如[]
)。
空白元字符:换页符(f)、换行符(n)、回车符(r)、制表符(t)。
一般来说,需要匹配r、n和t等空白字符的情况比较多见。rn匹配一个回车+换行组合。
1.4.3 匹配特定的字符类型
- 匹配数字与非数字:
d:任何一个数字字符(等价于[0-9])
D:任何一个非数字字符(等价于[^0-9]
)
- 匹配字母数字或下划线:
w:任何一个字母数字或下划线字符(等价于[a-zA-Z0-9_])
W:任何一个非字母数字或非下划线字符(等价于[^a-zA-Z0-9_]
)
- 匹配空白字符与非空白字符:
s:任何一个空白字符(等价于[fnrtv]
)
S:任何一个非空白字符(等价于[^fnrtv]
)
1.5 重复匹配
- 匹配一个或多个字符:
+
匹配一个或多个字符,在一个给定字符集合加上+后缀时,必须放在整个字符集合的外面,如[0-9]+
。
一般来说,当在字符集合使用时,像.和+这样的元字符被解释为普通字符,不需要转义,但转义也不影响。
- 匹配零个或多个字符:
*
用来匹配字符或字符集合出现零次或多次的情况。
- 匹配零个或一个字符:
?
可以匹配某个字符或字符集合的零次或一次。
[]
的常规用法是把多个字符定义为一个集合,但不少程序员喜欢把一个字符也定义为一个集合,好处是可以增加可读性和避免产生误解。同时使用[]和?时,要把?放在字符集合的外面。
- 具体的匹配次数:
设置具体的匹配次数,把数字写在{}
中,如{3}
。
可以为重复匹配的次数设定一个区间范围,设置最小次数和最大次数,如{3, 5}
。
也可以指定至少要匹配的次数,如{3, }
。
- 防止过度匹配:
在使用重复匹配如果没有上限值,则有时会导致过度匹配的现象。
像*
和+
这些都是“贪婪型”元字符,其匹配