概述
定义
正则表达式(Regular Expression,简称regex),是一种处理文本的工具,并不算得上是一门“语言”,可以理解为内嵌于其它语言中的“迷你语言”。用途
搜索,替换语法
正则表达式区分大小写;
由字符和具有特殊含义的元字符构成;
对于大部分的元字符,当要使用它们本身时,一般需要使用反斜线 \ 进行转义,\ 本身也是一个元字符,要搜索 \ 本身时,使用 \\ 转义序列;
当有多个匹配结果的时候,正则表达式的引擎默认只返回第一个结果。但是大部分实现了正则表达式的编程语言都提供了返回多个结果的方法。
匹配单个字符
匹配纯文本
正则表达式中的每一个普通字符(非元字符)都匹配这个字符本身。
匹配任意字符
使用英文句点符号 . 匹配除了换行符以外的任意一个字符。
要匹配句点 . 本身时,必须使用反斜线 \. 进行转义。
匹配一组字符
匹配多个字符中的一个
使用 [] 表示一个字符集合,其中可以包含任意多个任意字符。
要匹配 [ 或 ] 本身时,必须使用 \ 进行转义
例如,[abc123] 这个正则表达式,匹配 “abc123” 中任意一个字符。
使用字符集合区间
在 [] 使用中使用连字符 - 来定义字符区间。
字符区间的首、尾字符可以是ASCII字符表里的任意一个字符。
字符集合中可以包含多个使用连字符 - 连接的字符区间。
连字符是一个特殊的元字符,只有在字符集合 [] 中具有特殊含义,在该区域以外只是一个普通字符,不需要进行转义。
常用了字符区间如下:
元字符 | 含义 |
---|---|
[A-Z] | 匹配从A到Z中的任意一个大写字母 |
[a-z] | 匹配从a到z中的任意一个小写字母 |
[0-9] | 匹配数字0到9之间的任意一个数字 |
取非匹配
在字符集合中,元字符 [ 的右边第一个位置,使用 ^ 元字符,表示取非操作。
^ 作用于该字符集合中的所有字符或字符区间。
例如:
[^abc] ,匹配除了 “a” “b” “c” 以外的任意一个字符。
使用元字符
大部分的元字符,在搜索其本身时,需要使用 \ 进行转义。
匹配空白字符
元字符 | 含义 |
---|---|
\b | 退格键,回退一个字符 |
\f | 换页符 |
\r | 回车符 |
\n | 换行符 |
\t | 制表符 |
\v | 垂直制表符 |
\s | 空白字符,等价于 [\f\r\n\t\v] |
\S | 非空白字符,等价于 [^\f\r\n\t\v] |
注意:对于换行符,在Windows操作系统中使用 \r\n ,而在Unix/Linux操作系统中,使用 \n\n
匹配数字
元字符 | 含义 |
---|---|
\d | 任意一个数字字符,等价于[0-9] |
\D | 任意一个非数字字符,等价于[^0-9] |
匹配字母数字下划线
元字符 | 含义 |
---|---|
\w | 任意一个字母、数字或下划线字符,等价于[a-zA-Z0-9_] |
\W | 任意一个非字母、数字或下划线字符,等价于[^a-zA-Z0-9_] |
重复匹配
使用重复匹配元字符,重复匹配字符或字符集合。
重复次数元字符
元字符 | 含义 |
---|---|
? | 匹配字符或字符集合0次或1次,即有或没有 |
+ | 匹配字符或字符集合1次或多次,即至少有一次 |
* | 匹配字符或字符集和0次或多次,即任意次数 |
{N,M} | 匹配字符或字符集合至少 N 次,至多 M 次 |
{N,} | 匹配字符或字符集合至少 N 次,上不封顶 |
{N} | 匹配字符或字符集合刚好 N 次 |
防止过度匹配
贪婪型元字符:尽可能的从一段文本的开头匹配到结尾,而不是匹配到遇到的第一个匹配就结束;
懒惰型元字符:与贪婪型元字符的行为相反,只匹配尽可能少的字符。
贪婪型元字符 | 懒惰型元字符 |
---|---|
* | *? |
+ | +? |
{N,} | {N,}? |
位置匹配
元字符 | 含义 |
---|---|
\b | 单词边界,匹配一个单词的开始或结尾,只是匹配一个位置,并不匹配任何字符 |
\B | 非单词边界,不匹配一个单词边界 |
^ | 字符串边界,匹配字符串的开头位置 |
$ | 字符串边界,匹配字符串的结尾位置 |