正则匹配任意字符和空格(正则表达式的匹配规则)

正则表达式的组成元素?

我们在编码过程中无论前端或者后端或多或少会遇到正则表达式,她虽然不是必须的,但是锦上添花是一定的,所以我们有必要去掌握它的规则,读懂他,了解他的语义,直至自己按规则写出自己业务逻辑的正则表达式,比如我们在修改维护人家的代码或者赏析源代码看到类似的字符串

(<(w*)([^>]*)>)|((?<=>).*?(?=<))

如果我们不了解语义规则,是不是心里慌得一P,心里万马奔腾,啥玩意东西?我在哪里,我是谁,我不活了?

正则匹配任意字符和空格(正则表达式的匹配规则)

替换清理如图文本空行,该表达式可以拆分成三组元字符组:

  • 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多个子分组,一定要追溯到所有的子分组闭合之后,分组是正则表达式一个重要的概念,但是对于我们目前仅仅学习如何拆分一个正则表达式够了,具体子表达式具体开文详细讲。

条件选择元字符 或 |:

表示几个并行的条件,只要其中一个满足,就匹配成功

String regex1 = "(li|zh)ang";// regex1:既能匹配liang也可以匹配zhangString regex2 = "[li|zh]ang";// 注意和范围单个字符匹配的不同,regex2这样写可以匹配lang iang |ang zang hang 这种组合

实战:根据上面的准备,我们来拆分开篇正则表达式: (<(w*)([^>]*)>)|((?<=>).*?(?=<))

拆分过程:

//第一次拆分:var group1 = regex[0] = (<(w*)([^>]*)>); (这个我不认识(。•ˇ‸ˇ•。))var group2 = regex[1] = | ;(这个我认识,分支条件嘛)var group3 = regex[2] = ((?<=>).*?(?=<));(这个我不认识(。•ˇ‸ˇ•。))//第二次拆分:继续拆分group1元字符组:var group1_child_1 = group1[0] = < (这个我认识哦,原来你是匹配字符<)var group1_child_2 = group1[1] = (w*) (原来你是配置任意大小写字母、数字,想想,哦原来作者这里是匹配html元素标签啊,比如div、img)var group1_child_3 = group1[2] = ([^>]*)(匹配直到出现>前的任意字符)var group1_child_4 = group1[3] = >(匹配字符>)组合起来改组就是匹配一个html元素的开始带属性的标签,比如:<div id="header">,MD,原来如此的简单....继续分解,知道拆分成一个一个有意义的子模式,按规则组织匹配字符,让后我们就能读懂该正则表达式的终极奥义。

总结:

关键字:零宽断言 元字符 分组 拆

有了这几个术语的概念,你可以把一个正则表达式庖丁解牛分成一个一个基础的元字符,弄明白他的意义,中间有不明白的元字符定义,可以查查资料,那么恭喜你,正则表达式你花5分钟就入门了。

(0)
小多多的头像小多多创始人

相关推荐

发表回复

登录后才能评论