美文网首页2016技术笔记
2016笔记——正则表达式

2016笔记——正则表达式

作者: 满庭花醉三千客 | 来源:发表于2018-07-27 14:30 被阅读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

    加油~

    相关文章

      网友评论

        本文标题:2016笔记——正则表达式

        本文链接:https://www.haomeiwen.com/subject/pqxgmftx.html