一、概念
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。在众多语言中都可以支持正则表达式,如Perl、PHP、Java、Python、Ruby等。当然在Java中也可以通过处理字符串的方式达到检索,替换文本字符串的目的,但是有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的,当然这也是建立在熟悉正则表达式的基础之上的。
二、语法
2.1、常用元字符
正则表达式常用的元字符如下:
元字符 | 说明 |
---|
\d | 匹配数字,相当于[0-9] |
\D | 匹配非数字,相当于[^0-9] |
\w | 匹配字母、数字、汉字或下划线的字符 |
\W | 匹配任意不是字母、数字、汉字或下划线的字符 |
\s | 匹配任意的空白符,如空格、换行符、制表符等 |
\S | 匹配任意不是空白符的字符 |
. | 匹配除了换行符以外的任意字符 |
[…] | 匹配方括号内的所有字符 |
[^…] | 匹配非方括号中的所有字符 |
2.2、连接符
连接符 | 说明 | |
---|
[0-9] | 匹配数字,相当于\d | |
[a-z] | 匹配英文小写字母 | 测验 |
[A-Z] | 匹配英文大写字母 | |
[0-9a-zA-Z] | 匹配数字或英文字母 | |
2.3、限定符
限定符 | 说明 | |
---|
+ | 重复1次或多次 | 测验 |
* | 重复0次或更多次 | 测验 |
? | 重复0次或1次 | 测验 |
{n} | 重复n次 | 测验 |
{n,} | 重复n次或更多次 | 测验 |
{n,m} | 重复n到m次 | 测验 |
3.4、定位符
定位符 | 说明 |
---|
^ | 限定开始位置的字符 |
$ | 限定结尾的字符 |
\b | 限定单词(字)边界的字符 |
\B | 限定非单词(字)边界的字符 |
3.5、转义字符
转义字符 | 说明 |
---|
\a | 匹配字符串开始位置 |
\b | 退格 |
\n | 回车换行 |
\t | Tab制表 |
\f | 换页 |
’ | 单引号’ |
" | 双引号" |
\v | 挑格 |
\r | 换行 |
\z | 匹配字符串结束位置 |
\\ | 反斜杠\ |
\OOO | 八进制整数,范围为000~777 |
\xHH | 十六进制整数,范围为00~FF |
\uhhhh | 十六进制编码的Unicode字符 |
3.6、选择符
3.7、分组
园括号()用于子表达式分组,即把一个正则表达式的全部或部分分成一个或多个组,分组后用园括号括起来的表达式看作一个整体。
四、工具
正则表达式可视化 >>
正则表达式在线测试工具 >>
五、常用表达式
5.1、校验数字的表达式
- 数字:^[0-9]*$
- n位的数字:^\d{n}$
- 至少n位的数字:^\d{n,}$
- m-n位的数字:^\d{m,n}$
- 零和非零开头的数字:^(0|[1-9][0-9]*)$
- 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
- 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})$
- 正数、负数、和小数:^(-|+)?\d+(.\d+)?$
- 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
- 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
- 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
- 非零的负整数:^-[1-9][]0-9"$ 或 ^-[1-9]\d$
- 非负整数:^\d+$ 或 ^[1-9]\d*|0$
- 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
- 非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$
- 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$
- 正浮点数:^[1-9]\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
- 负浮点数:^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
- 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$
5.2、校验字符的表达式
- 汉字:^[\u4e00-\u9fa5]{0,}$
- 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
- 长度为3-20的所有字符:^.{3,20}$
- 由26个英文字母组成的字符串:^[A-Za-z]+$
- 由26个大写英文字母组成的字符串:^[A-Z]+$
- 由26个小写英文字母组成的字符串:^[a-z]+$
- 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
- 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
- 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
- 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
- 可以输入含有"^%&',;=?$\"等字符:[^%&',;=?$\x22]+
- 禁止输入含有~的字符:[^~]+
参考资料: