定义
正则表达式(Regular Expression),即预先设置一条字符串描述一个特征,然后用它去验证另一个字符串是否匹配这个特征。例如,验证用户输入的邮件地址是否合法;验证手机号码是否合法等等。
正则表达式由两种字符组成:“元字符”和“普通字符”。其中,前者在正则表达式中有特殊的意义。它可以是一个字符,也可以是一个字符序列。后者则是普通的文本字符。
语法(简单)
正则表达式中比较重要的三个地方:括号(B)、插入符号(C)以及美元符号(D)。
- 括号(Bracket)
符号 | 备注 |
---|---|
大括号{} | 指定匹配字符的数量 |
中括号[] | 需要匹配的字符,且只匹配一个字符 |
小括号() | 匹配字符串任何位置中按相同顺序排列的字符;分组 |
插入符号(Caret)
插入符号“^”,表示正则表达式的开始。与字符串开始的地方匹配,不匹配任何字符。美元符号(Dollar)
美元符号“$”,表示正则表达式的结束。与字符串结束的地方匹配,不匹配任何字符。
举例如下:
^[0-9]$
描述:匹配0-9之间的任何一个数字,而且仅匹配一个数字。^g[o]{2,3}gle$
描述:匹配以字符“g”开头,以字符序列“le”结尾,中间匹配字符“o”,它可以出现2-3次。即只有字符序列“google”和“gooogle”会被匹配到。
语法(详细)
- 字符组“[]”
字符组是一组中括号,即[]。它可以匹配[]中包含的任意一个且只匹配一个字符。
在字符组中可以用连字符“-”来表示范围,可以用插入符号“^”表示排除型字符组。在字符组之外,“-”和“^”都只是普通的字符。
表达式 | 备注 |
---|---|
[0-9] | 表示任意一个数字,且只表示一个数字。 |
[a-z] | 表示任意一个小写字母 |
[A-Z] | 表示任意一个大写字母 |
[\u4e00-\u9fa5] | 表示任意一个汉字 |
注意:如果将字符组表达式[0-9]改为[^0-9],则表示的意思刚好相反。它表示任意一个非数字字符。
下面是常见字符组表达式的缩写:
表达式 | 备注 |
---|---|
\d | 相当于[0-9],即表示0~9中的任意一个数字 |
\D | 任意一个非数字字符,相当于[^0-9] |
\w | 任意一个字母(数字或下划线),相当于[a-zA-Z0-9_] |
\W | \w取反,相当于[^a-zA-Z0-9_] |
\s | 任意空白字符,相当于[\r\n\f\t\v] |
\S | 任意非空白字符,相当于[^\r\n\f\t\v] |
注意:“\r”表示回车,“\n”表示换行,“\f”表示换页,“\t”表示水平制表符,“\v”表示垂直制表符。
- 量词
量词表示一个子表达式可以被匹配的次数,子表达式可以是一个字符、字符组或者用小括号括起来的表达式。
表达式 | 说明 | 举例 |
---|---|---|
{m} | 表达式匹配m次 | g[o]{2}gle表示google |
{m,n} | 表达式最少匹配m次,最多n次 | g[o]{2,3}gle匹配google和gooogle |
{m,} | 表达式最少匹配m次 | [1-9]{3,}表示至少匹配三位数 |
? | 表达式匹配0或1次,相当于{0,1} | g[o]?gle匹配ggle和gogle |
* | 表达式匹配0或任意多次,相当于{0,} | g[o]*gle匹配可参考“google搜索” |
+ | 表达式匹配1或任意多次,相当于{1,} | 略 |
经典使用案例
- 用户名或密码
描述:^[a-zA-Z0-9_-]{3,16}$ 或者 ^[\w-]{3,16}$ - 邮箱Email
描述:^[a-zA-Z0-9-]+@[a-zA-Z0-9-]+(.[a-zA-Z0-9_-]+)+$
或者 ^[\w-]+@[\w-]+(.[\w-]+)+$ - 匹配空白字符
描述:^\n\s\r$ 或者 ^[\s]$ - 匹配网址url
描述:^[a-zA-z]+://[^\s]*$ - 匹配日期(简单)
描述:\d{4}-\d{2}-\d{2} 参考资料中由更加详细的日期匹配链接