记不清有多少次遇到需要写正则的时候,虽然零零碎碎的学了点,但还是不知道写,只能网上搜,有时搜索回来的
能用,有时用不了,自己又不会调。很想花点时间系统的学习一下正则,正则不比其他编程语言,好几次看博文学,看不下去。
搁置了很久,这次决定腾出时间好好学一下正则。
认识几个概念:元字符,字符组,多选结构,反向引用,转义,复用,行的起始和结束
太基础的东西就不讲了,如果要从小白讲起,那必须出一本书,我就讲一些个人认为很容混淆的东西,
字 符组 [] (只对一个字符起作用),意思是不管里面写了多长的字符,只要含有里面的任意一个字符就算匹配成功,如 /[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.屏蔽不需要的结果,书写正则之前能够先查看需要匹配的
对象以便找到需要屏蔽的情况