2016笔记——正则表达式
上次做表情的实时输入时,表示对正则表达式很懵逼,后来从网上找的格式字符串,自己也是一知半解。
今天从零开始整一整正则表达式。
一、小白级:
屏幕快照 2016-05-03 14.18.42.png一眼就能看出来,这是是要查找hi,一起看一下结果:
屏幕快照 2016-05-03 14.21.59.png可以看得出,一共有7个hi都打印出来了。说明hi可以匹配HI、hI、Hi、hi共四种情况。
二、入门级
如果我们想要精确查找单词hi,其他含有hi的单词(比如him)不算,该怎么办?
屏幕快照 2016-05-03 14.28.09.png此时,我们换了一下正则表达式,\b是正则表达式规定的一个特殊代码,也有人叫它元字符,它匹配的是单词的分界处。单词的分界处通常是空格、标点符号、换行符来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只 匹配一个位置。
接下来看一下效果:
屏幕快照 2016-05-03 14.34.46.png三、青铁级
如果我想匹配到 hi 后面跟着几个字母,然后再找到xiaopeipei。可不可以呢?当然可以!
屏幕快照 2016-05-03 14.43.23.png哇塞 这个正则表达式好厉害啊。。别想多了,我们剖析一下:
\b 占位符
hi 单词hi
\b 占位符
. 元字符,匹配除了换行符以外的任意字符。
元字符,它代表的是数量,指定*前面的内容可以连续重复使用任意次,以使整个表达式得到匹配。
\b 占位符
xiaopeipei 单词
\b 占位符
意思就是:先是一个单词hi,然后是任意个任意字符(不能是换行符),最后是xiaopeipei这个单词。
这样看来是不是简单多了?
看一下结果:
屏幕快照 2016-05-03 14.49.10.png四、黄铜级
如果我们想要匹配数字该怎么写?
屏幕快照 2016-05-03 14.55.49.png\d是一个新的元字符,匹配一个数字。
那么第一个表达式就没什么问题了,一个一个对号入座即可。
第二个表达式为何可以如此精简?
这里的 \d{3} 的意思是前面的 \d 必须连续重复3次, \d{7} 的意思是前面的 \d 必须连续重复7次。
看一下效果:
屏幕快照 2016-05-03 15.00.32.png五、白银级
匹配的如果是汉字什么的可以实现吗?
必须可以。
屏幕快照 2016-05-03 15.36.17.png分析第一个:
\b 占位符 单词开始
G G字母开头
\w 元字符,匹配字母、数字、下划线、汉字
任意数量
d 字母d
\b 占位符 单词结束
含义就是:匹配以字母G开头的单词,然后是任意数量的字母、数字、下划线、汉字然后是字母d,然后是单词结束。
分析第二个:
\b 占位符,单词开始
\w{4} 4个任意的字母、数字、下划线、汉字
\b 占位符,单词结束
含义就是:匹配刚好4个字符的单词。
效果:
屏幕快照 2016-05-03 15.41.22.png六、黄金级
匹配的个数有区别吗?
屏幕快照 2016-05-03 15.54.25.png分析第一个:
\b 占位符 单词的开头
d 字母d
\w* 任意数量的字母、数字、下划线、汉字(可以为0)
o 字母o
\b 占位符,单词的结束
含义:查找字母d开头,中间任意个任意字母,字母o结尾的单词
第二个和第一个的区别在于:
\w+ 一个或者多个字母、数字、下划线、 汉字(至少为1)
含义:查找字母d开头,中间至少一个任意字母,字母o结尾的单词
结果:
屏幕快照 2016-05-03 15.54.34.png七、白金级
我想设定匹配的字符数,怎么整?
屏幕快照 2016-05-03 16.20.46.png分析:
^ 元字符,匹配用来查找的字符串的开头。
m 字母m
\w 元字符,匹配字母、数字、下划线、汉字
{3,9} 重复的次数大于等于3次,小于等于9次
$ 元字符,匹配用来查找的字符串的结尾。
含义:查找字母m开头,3到9位字母、数字、下划线、汉字 的单词。
结果:
屏幕快照 2016-05-03 16.25.39.png八、钻石级
我想查找 . 该怎么办?
屏幕快照 2016-05-03 16.45.29.png分析:
\b 元字符,单词的开始
www 字母www
\. 查找.符号,本身.符号是代表任意字符,如果直接用.是没法找出来的,要转义,加 \ 符号。
\w* 任意的字母、数字、下划线、汉字
\. 查找.符号
\w{2,3} 不少于两个不多于三个字符
\b 占位符,单词的结束
含义:查找以www.开头,中间任意字符,以.和两到三个字符结尾的单词
结果:
屏幕快照 2016-05-03 16.46.18.png九、白金级
我如果只想找wql该怎么指定呢?
屏幕快照 2016-05-03 17.14.50.png[ ]中所列出的所有元素,都将会成为匹配的对象
[wql] 匹配时,会分别寻找w、q、l
[!?] 匹配时,会分别寻找!和 ?符号
[0-9] 完全等价于\d [a-z0-9A-Z_]只考虑英文的话,是等价于\w的。
结果:
屏幕快照 2016-05-03 17.19.41.png十、黄金级
如果我想写两个条件怎么写?
屏幕快照 2016-05-03 17.28.40.png分析:
\b 元字符,单词的开始
\d{3} 3个数字
-符号
\d{8} 8个数字
\b 元字符,单词的开始
| 分隔不同规则的符号
\b 元字符,单词的开始
\d{4} 4个数字
-符号
\d{7} 7个数字
\b 元字符,单词的开始
含义:查找区号为4位,本地号为7位的号码以及区号为3位,本地号为8位的号码。
注意:使用分支条件时,要注意各个条件的顺序。因为匹配分支条件时,会从左到右地测试每个条件,如果满足某个分支,则不去管其他条件了。
A = \d {5}
B = \d {5}-\d{4}
如果为A|B,那么只会匹配5位数字了,因为满足B的都被拆了前五位。这时应该采用B|A分支条件。
效果:
屏幕快照 2016-05-03 17.39.49.png十一、白银级
重复的单个字符好弄,可是重复多个字符该怎么办?
屏幕快照 2016-05-03 18.04.18.png分析一式:
\b 元字符,单词的开始
(wql) 子表达式wql
(wql){2} 子表达式重复两次
\b 元字符,单词的结束
| 分隔不同规则的符号
\b 元字符,单词的开始
[a-z] 小写字母
([a-z]) 将小写字母作为子表达式
([a-z]){2} 子表达式重复两次
\b 元字符,单词的结束
含义:找两个wql连写的,或者找两个小写字母连写的。
分析二式:
\b 元字符,单词的开始
[0-6] 数字0-6
([0-6]) 将0-6的数字作为子表达式
([0-6]){3} 子表达式重复三次
A 字母A
? 重复0次或1次
[a-z] 小写字母
([a-z]) 将小写字母作为子表达式
([a-z]){2} 子表达式重复两次
\b 元字符,单词的结束
含义:查找三个一样的数字,然后可以有A,也可以没有A,然后是两个一样的小写字母。
效果:
屏幕快照 2016-05-03 17.59.02.png加油~