半小时学会正则-半小时没学会的我请你看头号玩家
Demo采用python演示,如果不熟悉语法看看热闹就行,不影响你对正则的理解
一.单个字符匹配
字符 |
匹配 |
---|---|
. | 匹配任意字符(除\n) |
[...] |
匹配字符集 |
\s/\S | 匹配空白/非空白字符 |
\d/\D | 匹配数字/非数字 |
\w/\W | 匹配单词字符[a-zA-Z0-9]/非单词字符 |
Demo:
采用 . 可以匹配任意字符,a-z,A-Z,0-9
分组可以表达一个满足一个组内的内容即可,后面3个同理
二.多个字符匹配
字符 |
匹配 |
---|---|
* | 匹配前一个字符0次到无限次 |
+ | 匹配前一个字符1次到无限次 |
? | 匹配前一个字符0次或者1次 |
{m}/{m,n} | 匹配前一个字符m次到n次 |
*? /+? /?? | 匹配模式变为非贪婪(尽可能少匹配字符) |
Demo:
匹配a-z出现0到无限次,顺带理解下非贪婪,非贪婪就是尽可能少匹配,例如a-z出现1到无限次,采用非贪婪,就匹配出1个
匹配a-z出现6次,可以,但是出现7次,因为不够7个所以匹配不出来
改为匹配0到7次,可以匹配
三.边界匹配
字符 |
匹配 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\A / \Z | 指定的字符串必须出现在开头/结尾 |
Demo:
可以看到是以0-9为开头重复0-10次,以@qq.com为结尾,可以用于匹配邮箱是否合法
强制以111为开头,可写成\A111
四.分组匹配
字符 |
匹配 |
---|---|
| | 匹配左右任意一个表达式 |
(ab) | 括号中表达式作为一个分组 |
\<number> | 引用编号为number的分组匹配到的字符串 |
(?P<name>) | 分组起一个别名 |
(?P=name) | 引用别名为name的分组匹配字符串 |
Demo:
竖线的用法,或的关系,同时将126和163用括号括起来,表示他们是一个分组
再次使用([\w]+>)这个分组的时候使用\1 可以看到如果前后不匹配,则返回空,分组过多的时候,用数字就会分不清哪个是哪个,所以可以采用给分组命名
结束