正则表达式攻关(易混淆点)

记不清有多少次遇到需要写正则的时候,虽然零零碎碎的学了点,但还是不知道写,只能网上搜,有时搜索回来的

能用,有时用不了,自己又不会调。很想花点时间系统的学习一下正则,正则不比其他编程语言,好几次看博文学,看不下去。

搁置了很久,这次决定腾出时间好好学一下正则。

认识几个概念:元字符,字符组,多选结构,反向引用,转义,复用,行的起始和结束

 

 太基础的东西就不讲了,如果要从小白讲起,那必须出一本书,我就讲一些个人认为很容混淆的东西,

   字 符组 []  (只对一个字符起作用),意思是不管里面写了多长的字符,只要含有里面的任意一个字符就算匹配成功,如 /[abcdef]/,

只要字符串里面包含括号里面的任意一个字符,就算匹配成功。

  排除型字符 [^abc]  脱字符 ^位于字符组首位,如果不是首位就只能当做普通字符 ^来匹配了  

 元字符 -  一般位于字符组内部表示字符范围,如[a-c1-3]等价于[abc123],注意如果位于字符组两端那它就是个普通字符 -  

 元字符如果位于字符组内部,则需要先判断此时它究竟是元字符还是普通字符

 计数元字符(? + *) 仅作用于它前面的一个单元(可以是一个字符,也可以是一个子表达式,或者是一个字符组)

 脱字符^ 匹配行首,$匹配行尾 ,这两个一般用于完全匹配或半完全匹配时使用,如

 

 

 

 

 仔细观察三个例子就很容易发现 ^ 及 $的作用了,用了 ^,表示字符串的开头必须匹配后面的表达式,用了$表示结尾必须匹配

如果需要匹配元字符本身,加上转义字符 反斜杠 \就好了,如:匹配?

 

 

 可选 |  理解成  "或",作用对象同样是一个单元,如果没有范围限制,就是左边或者右边,如:

 

 

理解成   abc[a-z]  或者  [0-9][0-9],又如这个

 

 理解成 ---abc[a-z]  或者 ---[0-9][0-9],这里因为有()作为范围限制,所以 |的作用范围受到限制

 当范围遇上反向引用 () + \1 这种 ,如,先看几种例子


 

 

 

 看完可以明白了 \1  \2 不是重复一次前面的范围表达式,而是收集了前面的匹配结果来匹配,

(\d)(\w)可以匹配一个数字接着一个字母  匹配可以得到 3s,然后后面  \1 \2 表示 匹配 3s,

这种很容易用来作为匹配某个连续重复出现的单次等等需求

正则的书写分为两个要求:1,匹配需要的字符,2.屏蔽不需要的结果,书写正则之前能够先查看需要匹配的

对象以便找到需要屏蔽的情况

 

posted @ 2019-10-29 17:10  虚风客  阅读(140)  评论(0编辑  收藏  举报