正则表达式——正则入门
正则测试地址:https://regex101.com/
先从一个例子开始正则表达式。
书写一个匹配手机号的正则表达式,为了方便讨论,假定手机号是1开头,第二位只能是3、5、8中的其中一个,总共11位的数字,形如13xxxxxxxxx。
匹配手机号的正则表达式为:^1[358]\d{9}$
,下面介绍此正则表达式中的各个符号的含义。
符号含义简介
^
:表示字符串的开头,后面紧接着1,表示匹配的字符串要以"1"开头。
1
:就是匹配“1”本身,^
不匹配字符,所以1就是匹配字符串的第一个字符。
[358]
:表示可以匹配3、5、8中的任何一个,当然,也只能匹配一个字符;[abc]
整个表达式用来匹配一个字符,这个被匹配字符可以是abc中的任一个。
\d
:表示一个数字字符,等同于[0123456789]
,匹配0123456789中的任何一个数字,[0123456789]
也可以写作[0-9]
。
{9}
:表示前面的\d
重复9次,即有9个数字。重复次数可以设定范围值或是最小值,{m,n}
表示前面的元素或是表达式最少重复m次,最多重复n次;{m,}
表示前面的元素或是表达式最少重复m次,不设定最大重复次数。
$
:表示字符串的结尾,它前面的\d{9}
数字重复9次后,后面就不能再有字符了。
如上图所示,13666666666符合正则表达式^1[358]\d{9}$
。
"13666666666"的第一位数字1,匹配正则表达式中的^1
,以数字1开头;第二位数字3匹配表达式中的[358]
,属于3、5、8中的一个;第三位至第十一位的9个数字,匹配表达式中的\d{9}
;第十一位数字后不再有字符,匹配表达式$
。
"13"匹配表达式中的^1[358]
,不匹配\d{9}
,后续没有9个数字;"71366666666"不匹配^1
,没有以数字1开头;"136666666666"匹配^1[358]\d{9}
,不匹配$
,9个数字后还有数字;"abf"不匹配^1
,没有以数字1开头。
匹配一个字符
想要匹配字符串"abc"中的a,正则表达式a
即可完成任务。在正则表达式中,可以使用字母或是数字,匹配其本身。正则表达式大小写敏感。
在正则中,.
(英文句点)可以用来匹配任意字符(换行符除外),包括它自己。
匹配一组字符中的一个
正则表达式[an]
表示匹配a或者n,[]中的字符可以理解为是"或"的关系。
在[]中可以使用区间表达式,例如[0-9]表示匹配0到9的数字,即所有数字;[a-z]表示匹配所有小写英文字母,[A-Z]表示匹配所有大写英文字母,[a-f]表示匹配a-f的所有小写字母。
有时我们希望不要匹配到某些字符,此时也可以用[]。例如[^abcdef]
表示不匹配abcdef中的任何一个,其他字符都可以,有些类似于取反。
同样的,字符区间一样可以用于取反操作。
需要注意的是,[]中的^作用范围是整个[]。例如[^a-f0-9]
表示不能匹配a-f的小写字母以及0-9的所有数字。
元字符
之前提到过,.
可以匹配所有单个字符(换行符除外),如果只是想匹配".“本身呢?此时只需要在”.“前面加一个转义符”\“即可,即正则表达式\.
。
同样的,之前提到的”["、"]“也可以通过加转义符来匹配本身,\[
、\]
。”\"同样可以通过转义来匹配其本身,\\
。
其他常用元字符如下:
空白元字符 | 含义 |
---|---|
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符(Tab键) |
\v | 垂直制表符 |
元字符 | 含义 |
---|---|
\d | 任何一个数字字符(等价于[0-9]) |
\D | 任何一个非数字字符(等价于[^0-9]) |
\w | 任何一个单词字符(数字,大小写字母,下划线)(等价于[0-9a-zA-Z_]) |
\W | 任何一个非单词字符(即非数字,非大小写字母,非下划线)(等价于[^0-9a-zA-Z_]) |
\s | 任何一个空白字符(等价于[\f\n\r\t\v]) |
\S | 任何一个非空白字符(等价于[^\f\n\r\t\v]) |
重复匹配
之前说的都是匹配一个字符,现在说一下如何重复匹配一个字符。
\d+
表示匹配\d一次或多次
\d*
表示匹配\d零次、一次或多次
\d?
表示匹配\d零次或一次
除了+、*、?可以重复匹配外,还可以使用{}进行更精确的重复匹配次数控制。
\d{3,5}
表示\d最少匹配三次,最多匹配五次
\d{3,}
表示\d最少匹配三次,最大匹配次数不做限制
\d{3}
表示\d匹配三次
位置匹配
\b
表示匹配单词边界,也就是一个位置,此位置一边是单词字符(\w代表的内容,即数字,大小写字母,下划线_),另一边不是单词字符。可以看到,字符串"23 word on"共有六个位置属于单词边界。
^
表示匹配字符串开头,字符串"23 word on"只有一个位置匹配成功。"^“用在”[]"中时表示取反,否则是匹配字符串开头。
$
表示匹配字符串结尾,字符串"23 word on"只有一个位置匹配成功。
总结
本文主要介绍了正则表达式中,匹配一个字符,匹配一组字符中的一个,什么是元字符,如何控制重复匹配,最后学习了几个简单的位置匹配。
下一篇:贪婪、非贪婪与占有模式