定义
正则表达式是一种用于匹配文本模式的特殊字符串。它提供了一种简洁而灵活的方式来搜索、匹配和操作文本。
用途
用于字符串匹配、搜索、替换、解析等操作。例如,验证电子邮件地址、提取特定格式的数据、替换文本中的某些部分等
元字符
.
: 匹配除\n(转行符)之外的任何单个字符。
^
(shift+6) :匹配一行的开始。
^abc
解释:表示字符串必须以abc开头,后面跟任意的字符。
(它还有一个意思就是取反的意思 )
[^a-zA-Z0-9]
解释:大小写字符和数字都不行。
$
:匹配行结束符。
abc$
解释:结尾必须以abc字符结束。
|
:将两个匹配条件进行逻辑“或”运算,替换符。
[a|b]
解释:要么是a要么是b。
(a|b)cd
解释:匹配"acd"或"bcd'。
圆括号和方括号
( )
:将 () 之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(在字符串提取的时候非常有用)。
作用:把一些字符表示为一个整体,改变优先级、定义提取组。
[ ]
:匹配括号中的任何一个字符。
例1:如何匹配二十六个英文字母中的任意一个?
[a-z]
例2:同时匹配大写的A—Z和小写的a-z,需要怎么写?
[a-zA-Z]
元字符的一些常用简写
\d
:代表一个数字,等同于[0-9] 。
\D
:代表非数字,等同于[^0-9]。
\s
(小写) :代表换行符、Tab制表符等空白字符(空格、回车、制表符)。
\S
(大写) :代表非空白字符(a0%$@@)。
\w
(小写) :匹配字母或数字或下划线或汉字,即能组成单词的字符(即除了%&#@!$等字符)。
[a-zA-Z0-9_汉字]
\W
(大写) :等同于[^\w] (即%&#@!$等字符)。
限定符
*
:匹配0至多个在它之前的子表达式。
abc*
解释:abc 可以出现0次或多次
+
:匹配前面的子表达式1次或多次。
abc+
解释:至少得出现一次 abc
?
:匹配前面的子表达式0次或1次。
abc?
解释: 出现0次或1次abc
{n}
:匹配确定的 n 次。
{n,m}
:最少匹配 n 次且最多匹配 m 次。
特殊组合
(?=.*x)
:必须有x类型字符
(?=.*\d)
解释:必须有[0-9]数字
同:(?=.*[0-9])
(?!.*x)
:不能有x类型字符
(?!.*\d)
解释:不能有[0-9]数字
(?!x+$)
:不能全是x类型字符
(?!\d+$)
解释:不能全是有[0-9]数字
符号的优先级
1.正则表达式从左到右进行计算,并遵循优先级顺序
2.相同优先级的从左到右进行运算,不同优先级的运算先高后低
运算符 | 描述 |
---|---|
\ | 转义符(优先级最高) |
() [] | 圆括号和方括号 |
* + ? {n} {n,m} | 限定符 |
^ $ . abc ABC 123 中文 特殊字符(%&#@!$) | 元字符和任何符号 |
丨 | 替换符,或(优先级最低) |
简单范例
验证输入的字符串是否大于10小于20(包含10、20)
^((1[0-9])|(20))$
解释:
1.输入字符串中匹配(包含)[10-19] 字符
2.或者输入字符串中匹配(包含)[20] 字符
3.输入字符串必须以[10-20]字符开始
4.输入字符串必须以[10-20]字符结束匹配
身份证号码的正则表达式范例
1.地址码校验
地址码规则:长6位,以数字1-9开头,后5位为0-9的数字
地址码组成:省级地址码(2位)+行政区划代码(4位)
地区 | 省级地址码 |
---|---|
华北 | 北京11,天津12,河北13,山西14,内蒙古15 |
东北 | 辽宁21,吉林22,黑龙江23 |
华东 | 上海31,江苏32,浙江33,安徽34,福建35,江西36,山东37 |
华中 | 河南41,湖北42,湖南43 |
华南 | 广东44,广西45,海南46 |
西南 | 四川51,贵州52,云南53,西藏54,重庆50 |
西北 | 陕西61,甘肃62,青海63,宁夏64,新疆65 |
特别 | 台湾71,香港81,澳门82 |
^([1-9]\d{5})&
解释:
1.输入字符串中匹配(包含)[1-9] 字符
2.输入字符串必须以[1-9] 字符开始
3.后续字符串匹配[1-9]字符 5次
注:该正则无法排除省份字符不合理的输入字符串
(但能有效应对省份地址码变动)
注:由于地址码在身份证号码开始应去除 & 符号
即^([1-9]\d{5})
2.验证18-20世纪的年份(4位:1800-2099 )
说明:年份码长4位,以数字18、19或20开头,剩余两位为0-9的数字
^((18|19|20)\d{2})&
解释:
1.输入字符串中匹配(包含)[18-20] 字符
2.输入字符串必须以[18-20]字符开始
3.后续字符串匹配[1-9]字符 2次
4.输入的字符串以[1800-2099]字符结束
注:若年份在输入字符串中间应去除 ^ 和 & 符号
即(18|19|20)\d{2}
3.验证月份码(2位:[1-12] )
说明:月份码长2位,第一位数字为0,第二位数字为1-9,或者第一位数字为1,第二位数字为0-2
((^0[1-9])|(^1[0-2]))&
解释:
1.输入字符串中匹配(包含)[01-09] 字符
2.输入字符串必须以[01-09]字符开始
3.或者输入字符串以[10-12]字符开始
4.输入的字符串以[01-12]字符结束
注:若月份在输入字符串中间应去除 ^ 和 & 符号
即((0[1-9])|(1[0-2]))
4.验证顺序码(3位:[000-999] )
说明:顺序码长3位,顺序码是数字
^(\d{3})&
解释:
1.输入字符串匹配[1-9] 3次
2.输入字符串必须以[000-999]字符开始
3.输入的字符串以[000-999]字符结束
注:由于顺序码在身份证号码中间应去除 ^ 和 & 符号
即\d{3}
5.验证校验码(1位:[0-9]或x或X )
说明:校验码长1位,可以是数字,字母x或字母X
^([0-9Xx])&
解释:
1.输入字符串匹配[0-9]、X、x
2.输入字符串必须以[0-9]、X、x字符开始
3.输入的字符串以[0-9]、X、x字符结束
注:由于校验码在身份证号码最后应去除 ^ 符号
即([0-9Xx]&
身份证验证正则表达式
^([1-9]\d{5})(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
描述:直接顺序拼接即可
四个密码强度范例
1.只能由字母(含有大小写)、数字组成,1-9位(1种字符)
^((?=.*\d)|(?=.*[A-z]))[\da-zA-Z]{1,9}$
解释:
1. (?=.*\d)---输入字符串必须有[0-9]数字
2. (?=.*[A-z])---输入字符串必须有大小写字母
3. [\da-zA-Z]---输入字符串匹配数字和大小写字母
4. {1,9}---输入字符串为1-9位
2.至少包含字母(含有大小写)、数字,1-9位(2种字符)
^((?=.*[a-zA-Z])|(?=.*\d)).{1,9}$
解释:
1. (?=.*\d)---输入字符串必须有[0-9]数字
2. (?=.*[A-z])---输入字符串必须有大小写字母
3. .---输入字符串匹配所有字符
4. {1,9}---输入字符串为1-9位
3.由字母(含有大小写)、数字、特殊字符,任意2种组成,1-9位(2种字符)
^(?![a-zA-Z]+$)(?!\d+$)(?=.*[^\da-zA-Z\s]).{1,9}$
解释:
1.(?![a-zA-Z]+$)---输入字符串不能全是大小写字母
2.(?!\d+$)---输入字符串不能全是[0-9]数字
3.(?=.*[^\da-zA-Z\s])---输入字符串不允许存在除数字和大小写字母和特殊字符以外字符
4. .---输入字符串匹配所有字符
5. {1,9}---输入字符串为1-9位
4.至少包含字母(含有大小写)、数字、特殊字符,1-9位(3种字符)
^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^\da-zA-Z\s]).{1,9}$
解释:
1.(?=.*\d)---输入字符串必须有[0-9]数字
2.(?=.*[a-zA-Z])---输入字符串必须有大小写字母
3.(?=.*[^\da-zA-Z\s])---输入字符串不允许存在除数字和大小写字母和特殊字符以外字符
4. .---输入字符串匹配所有字符
5. {1,9}---输入字符串为1-9位
说明:由于匹配全部字符的条件下限制为不允许存在除数字和大小写字母和特殊字符以外字符因此无需单独为特殊字符设置匹配条件