简述
正则表达式是一种模式,可以检查字符串是否是一种模式,或者从字符串中找出符合该模式的内容。
正则表达式可以使用大多数字符来描述,它们都将匹配它本身。例如,正则表达式a
将匹配字符串a
,正则表达式abc
将匹配字符串abc
。尽管这看起来就是在判断字符串是否相等,但在引入了元字符后将会变得完全不一样。
元字符
元字符指的是有特殊含义的字符。
字符 | 含义 |
---|---|
\ | 转义 |
? | 匹配前面的内容零次或一次 |
+ | 匹配前面的内容一次或多次 |
* | 匹配前面的内容零次、一次或多次 |
^ | 匹配行首 |
$ | 匹配行尾 |
. | 匹配除换行符和回车符外的任何内容 |
| | 左右选择一个进行匹配 |
在引入元字符后,我们可以用ab?
来匹配a
或ab
,用a+
来匹配a
、aaa
、aaaaaaaaa
等。
字符集
可以用中括号定义字符集,它可以匹配字符集中任何一个字符。
例如,[abc]
可以匹配a
、b
、c
,但不能匹配d
。
如果字符集中定义的内容较多(但具有连贯性),可以使用-
表示范围。例如,[a-z]
将匹配所有小写字母,[A-Z]
将匹配所有大写字母,[0-9]
将匹配所有数字,[a-zA-Z0-9]
将匹配所有字母和数字。
同样可以定义反向字符集,它可以匹配给定字符集中之外的任意一个字符。例如,[^0-9]
将匹配数字以外的任何字符。
匹配次数
除了可以用元字符规定匹配次数外,还可以用大括号表示。
正则表达式 | 匹配次数 |
---|---|
{n} | 匹配n次 |
{n,} | 匹配至少n次 |
{n,m} | 匹配至少n次,至多m次 |
例如,a{5}
将匹配aaaaa
,对于aaa
、aaaaaaa
都不能匹配。
转义
如果我们需要匹配元字符,那么需要进行转义。例如,要匹配*
,需要使用正则表达式\*
。
同时,转义也可以匹配一些常用的内容。
转义 | 含义 |
---|---|
\d | 匹配数字 |
\w | 匹配字母、数字和下划线 |
\s | 匹配所有空白 |
\b | 匹配单词边界 |
\D | 匹配非数字 |
\W | 匹配非字母、数字和下划线 |
\S | 匹配所有非空白 |
\B | 匹配非单词边界 |