实战:根据上面的准备,我们来拆分开篇正则表达式:(<(w*)([^
正则表达式的组成元素?
我们在编码过程中无论前端或者后端或多或少会遇到正则表达式,她虽然不是必须的,锦上添花是一定的,所以我们有必要去掌握它的规则,读懂他,了解他的语义,直至自己按规则写出自己业务逻辑的正则表达式,比如我们在修改维护人家的代码或者赏析源代码看到类似的字符串
如果我们不了解语义规则,是不是心里慌得一P,心里万马奔腾,啥玩意东西?我在哪里,我是谁,我不活了?
还是有必要花点时间来学习下,如果各位同学观赏了上面的表达式产生和作者当初一样的情绪,恭喜你,两种选择,
一自己面壁去
二点个关注,给码字的作者一点小小的鼓励再拿个小板凳,仔细听我详细分解
言归正传,我们理解正则表达式的第一个基本概念
元字符(metacharacter)
当一个字符在正则引擎中赋予特殊意义,而不再代表字符本身含义,比如.在ASCII码中为46,在正则表达式语义环境中代表除开换行结束符之外任意字符,这句话究竟什么含义也?换句话说就是比如孙大圣的七十二变,根据具体的场景,他可以变成一只小小鸟,也可以变成一个漂亮小姐姐,或者其他任何东西,从引擎解析的角度可以假装是我们要找的那个东西,到达我们想要搜索结果,和我们sql里面的%通配符一样的语义
拆分正则表达式最小元字符组
文本字符:
代表字符的本身含义,比如字符a代表ASCII 码是97,他可以匹配你搜索字符串任何位置的a字符,相当于精确匹配。
匹配单个字符元字符
从表达式构建来说,一次匹配模式可以由一个元字符构成,也可以由多个元字符构造一组元字符完成一次匹配,那么读懂正则表达式就必须要求你有一双慧眼,可以把正则表达式拆分成一个(组)一个(组)的一次匹配模式,画重点拆
[A-F0-9] 字符集合区间中任意一个字符都可以匹配,匹配一次消费一个搜索字符串字符d 0到9任意一个数字D 匹配非数字[A-Za-z0-9] 匹配任意大小写字母、数字w 和上面相同,匹配任意大小写字母、数字,因为正则语言规则最先是linux使用的,这种使用频率过高,语法太繁琐了,作者在引擎中又自定义了一个简单的元字符来表述该语义,如果我们自己实现的正则引擎,你可以随意发挥,用某个简单的符号(元字符)代表某一类语义.一样的道理,其他还有很多,看你用具体哪个语法那种正则引擎,大致差不多,剩下的就仅仅是使用熟悉的过程而且 So easy!
转义序列元字符
当我们想用元字符本身的语义去匹配我们的搜索字符串的时候,用来让正则引擎定义的元字符回归本源,比如我们想匹配IP地址(d{1,3}.){3}d{1,3} 其中当正则引擎解析到.仅仅能匹配字符.,而不是匹配除开换行结束符之外任意字符。
位置匹配
(零宽断言)只匹配位置,不匹配字符,不consume字符,比如
^ 匹配字符串的边界,行首$ 匹配字符串的边界,行尾b一个单词的边界
替换清理如图文本空行,该表达式可以拆分成三组元字符组
regex[0]=^表示断言一行的起始位置regex[1]=s? 表示匹配任意多个字符匹配空白符(等价于[rntfv ])regex[2]=n 表示匹配换行符匹配到的结果替换为字符串空,即实现删除空白行
量词元字符
重复匹配,定位前面(文本元字符|字符元字符|分组元字符组)匹配重复的次数
? 匹配字符或者字符集合出现0次或者1次 匹配字符或者字符集合出现0次或者n次+ 匹配字符或者字符集合出现1次或者N次{m} 匹配模式必须出现m次{m,} 匹配模式最少出现m次,最多无穷N次{m,n} 匹配模式最少m次,最多n次
分组捕获元字符( ):
该分组类所有元字符组匹配看着一个完整分组作为一次匹配,而且查找最近的配对闭合括弧作为一个完整的子模式,注意该分组里面也许有N多个子分组,一定要追溯到所有的子分组闭合之后,分组是正则表达式一个重要的概念,对于我们目前仅仅学习如何拆分一个正则表达式够了,具体子表达式具体开文详细讲。
条件选择元字符 或 |:
表示几个并行的条件,只要其中一个满足,就匹配成功
实战根据上面的准备,我们来拆分开篇正则表达式 (<(w)([^>])>)|((?<=>).?(?=<))
拆分过程
关键字零宽断言 元字符 分组 拆
有了这几个术语的概念,你可以把一个正则表达式庖丁解牛分成一个一个基础的元字符,弄明白他的意义,中间有不明白的元字符定义,可以查查资料,那么恭喜你,正则表达式你花5分钟就入门了。