半小时学会正则-半小时没学会的我请你看头号玩家

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 可以看到如果前后不匹配,则返回空,分组过多的时候,用数字就会分不清哪个是哪个,所以可以采用给分组命名

半小时学会正则-半小时没学会的我请你看头号玩家


结束