正则表达式基础内容
正则表达式(Regular Expression):以特定的字符串模式获取指定字符串。
元字符 匹配一个位置或字符集合中的一个字符
两种类型:
1. 匹配位置的元字符
🍸^匹配开始
^start here
🍸$匹配结束
end here$
【^$】 表示匹配一个空行
🍸\b匹配一个位置
\b不能匹配任何空格符号、标点符号或者换行符号中任何一个。
\bStr 匹配以Str开头的字符串
\bString\b 匹配String字符串
2. 匹配字符的元字符
🍡\. 匹配除了换行符之外的任意字符
🍡\w 匹配任意单词字符包含字母、数字、下划线和汉字
🍡\W 匹配非单词字符
w -> word: 字符eg: 字母、数字、下划线和汉字
🍡\s 匹配任意空白字符包含空格、制表符、换行符、中文全角空格等
🍡\S 匹配任意非空白字符
s -> special: 特殊字符 eg: 空格、制表符、换行符
🍡\d 匹配任意数字
🍡\D 匹配非数字字符
字符类 []
元字符通常一次只匹配一个位置或字符集合中的一个字符。因此要匹配字符集合就要使用字符类 []
[0123456679] # 匹配数字
连接符 -
[0-9],[a-zA-z]
只有在字符类中“-”不是第一个字符时候,才有特殊意义
[-a] # 匹配字符 -或a
如果字符^是第一个字符那么不匹配带有后面的字符
^ 和 []表示取非
[^aAeEiIoOuU] # 匹配非元音字符
替换符 "|"
优先匹配左侧表达式
(?(表达式)yes|no)表达式要么与yes部分匹配要么与no部分匹配
eg: (?(name)yes|no)以name命名的字符串要么与yes部分匹配,要么与no部分匹配首先回匹配|左侧,若未成功再匹配右侧!
限定符
{n} 重复n次
{n,} 重复<=n次
{n,m} 重复 n<= 次数 <=m
* 重复 >= 0次
+ 重复 >= 1次
? 重复 1或0次
*? 尽可能少的使用重复的第一个匹配
+? 尽可能少的使用重复,但至少使用一次
?? 使用0次重复或一次重复
{n}? 等同于{n}
{n,}? 尽可能少的使用重复,但至少使用n次
{n,m}? 尽可能少的使用重复,但介于n次和m次之间
分组 “(” ")"
通过()分组后将"()"之间的表达式看作一个整体来处理
eg: (abc){1,2}匹配abc字符串出现一次或两次的字符串
| key | desc |
|---|---|
| (expression) | 匹配字符串expression,并将匹配的文本保存到自动命名的组里 |
| (? |
匹配字符串expression,并将匹配的文本以name名称,名称不能有标点符号且以数字开头 |
| (?:expression) | 匹配字符串expression,不保存文本,也不分配字号) |
| (?=expression) | 匹配字符串expression前面的位置 |
| (?!expression) | 匹配后面不是字符串expression的位置 |
| (?<=expression | 匹配字符串expression后面的位置 |
| (?<!expression) | 匹配前面不是字符串expression的位置 |
| (?>expression) | 只匹配字符串expression一次 |
反向引用 "\数字"
分组之后,每个分子将被赋予一个组号,编号规则是从左往右,以"("为标志,从1开始编号
eg: \b(\w)\1\b 实际上和\b(\w)\w\b类似,不同的是 \1所在地方指的是第一个()里面的内容
\b(\w)\1\b 匹配的是 aa而匹配不到ab
\b(\w)\w\b 匹配的是 aa和bb
零宽度断言
| keywords | DESC |
|---|---|
| ^ | 匹配开始位置 |
| $ | 匹配结束位置 |
| \A | 匹配必须出现在字符串开头 |
| \Z | 匹配必须出现在字符串结尾,或者字符串结尾处的换行符之前 |
| \z | 匹配必须出现在字符串结尾 |
| \G | 匹配必须出现在上一个匹配结束的地方 |
| \b | 匹配字符的开始或结束位置 |
| \B | 匹配不是在字符的开始或结束位置 |
字符转义 ""
\\->\ |
\^ -> ^ |
```[->[ | ]->]``` | \$->$ |
|---|---|---|---|---|
| \a(响铃) | \b(单词边界或字符类中退格符) | \t制表符 | \r(回车符) | \v(垂直制表符) |
| \f(换页符) | \n(换行符) | \e(回退符) | \040 匹配8进制 | \x20 匹配16进制 |
案例
二进制数值: ^(0|(1[0-1]*))$
八进制数值:^(0|([1-7][0-7]*))$
十六进制数值:^(0|([1-9A-Fa-f][0-9A-Fa-f]*))$
国内手机号码: \b0?(12\d{9})|(15[89]\d{8}\b
身份证号码(18位):^\d{6}((1[89])|(2\d))\d{2}((0\d)|(1[0-2]))(3[01])|([0-2]\d))\d{3}(\d|X)$
一、数字的正则表达式
1.数字:^[0-9]*$
2.n位的数字:^\d{n}$
3.至少n位的数字:^\d{n,}$
4.m-n位的数字:^\d{m,n}$
5.零和非零开头的数字:^(0|[1-9][0-9]*)$
6.非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7.带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8.正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
二、字符的正则表达式
1.汉字:^[\u4e00-\u9fa5]{0,}$
2.英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3.长度为3-20的所有字符:^.{3,20}$
4.由26个英文字母组成的字符串:^[A-Za-z]+$
5.由26个大写英文字母组成的字符串:^[A-Z]+$
6.由26个小写英文字母组成的字符串:^[a-z]+$
7.由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
8.由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9.中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10.中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11.禁止输入含有~的字符:[^~\x22]+
特殊需求正则表达式
1.Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
2.域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3.URL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
4.手机号码:^[1][3,4,5,7,8][0-9]{9}$
5. 身份证号:
15或18位身份证:^\d{15}|\d{18}$
15位身份证:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
18位身份证:^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
6.帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
7.密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
8.强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
9.日期格式:^\d{4}-\d{1,2}-\d{1,2}
10.IP地址:\d+\.\d+\.\d+\.\d+
11.中文字符的正则表达式:[\u4e00-\u9fa5]
学而不思则罔,思而不学则殆!

浙公网安备 33010602011771号