转载自知乎~https://www.zhihu.com/question/48219401/answer/742444326
正则每次用的时候看一次,下一次就忘记了,看着就头疼哈哈,不过这次感觉还是要手动写一遍才能更好理解和记住。目前只看了一部分,后续再补上
元字符:
字符 | 说明 | 举例 |
. | 匹配除换行符以外的任意字符 | 1.匹配有abc开头的字符串 \babc 或^abc 2.匹配1开头的11位数字的手机号 ^1\d\d\d\d\d\d\d\d\d\d$ |
\w | 匹配字母或数字或下划线或汉字 | |
\s | 匹配任意的空白符 | |
\d | 匹配数字 | |
\b | 匹配单词的开始或结束 | |
^ | 匹配字符串的开始 | |
$ | 匹配字符串的结束 |
重复限定符:
字符 | 说明 | 举例 |
* | 重复零次或更多次 | 1.匹配8位数字的QQ号码 ^\d{8}$ 2,匹配8-10位数字的QQ号码 ^\d{8,10}$ 3.匹配以a开头,多个b结尾的字符串 ^ab*$ abbbb |
+ | 重复一次或多次 | |
? | 重复0次或一次 | |
{n} | 重复n次 | |
{n,} | 重复n次或多次 | |
{n,m} | 重复n次到m次 |
分组:使用小括号()来做分组
转义:使用\来转义
条件或:使用| 来表示分支条件
区间:限定0-9[0-9],限定某些数字1,3,6[136],[A-Z]
进阶:
1.零宽断言
1.1 正向先行断言
- 语法:(?=pattern)
- 作用:匹配pattern表达式的前面内容,不返回本身。
1.2 正向后行断言
- 语法:(?<=pattern)
- 作用:匹配pattern表达式的后面的内容不反悔本身
1.3 负向先行断言
- 语法:(?!pattern)
- 作用:匹配非pattern表达式前面内容,不返回本身。
1.4 负向后行断言
- 语法:(?!<pattern)
- 匹配非pattern表达式的前面内容,不返回本身。
2.捕获和非捕获
捕获通常和分组联系在一起,也就是“捕获组”
2.1 数字编号捕获组
- 语法:(exp)
- 作用:从左侧开始,每出现一个左括号和与之对应的右括号间的内容为一个分组,在分组中,第0组为整个表达式,第一组开始为分组
- 020-85653333
- (0\d{2})-(\d{8})
3.反向引用
4.贪婪和非贪婪