2016技术笔记

2016笔记——正则表达式

2018-07-27  本文已影响6人  满庭花醉三千客

上次做表情的实时输入时,表示对正则表达式很懵逼,后来从网上找的格式字符串,自己也是一知半解。

今天从零开始整一整正则表达式。

一、小白级:

屏幕快照 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

加油~

上一篇下一篇

猜你喜欢

热点阅读