正则表达式系统学习一

318 阅读3分钟

英⽂是 Regular Expression,简称 RE。顾名思义,正则其实就是⼀种描述⽂本内容组成规律的表示 ⽅式。简单地说就是描述字符串的规则。 

学会了正则表达式之后,务必要保持克制 。

第⼀,能⽤普通字符串处理的,坚决⽤普通字符串处理。字符串处理的速度不⻅得差,可读性却好 上很多。如果要在⼤段⽂本中定位所有的 today 或者 tomorrow,⽤最简单的字符串查找,直接找 两遍,明显⽐ to(day|morrow) 看起来更清楚。 

第⼆,能写注释的正则表达式,⼀定要写注释。正则表达式的语法⾮常古⽼,不够直观,为了便于 阅读和维护,如今⼤部分语⾔⾥都可以通过 x 打开注释模式。有了注释,复杂正则表达式的结构也 能⼀⽬了然。 

第三,能⽤多个简单正则表达式解决的,⼀定不要苛求⽤⼀个复杂的正则表达式。这⾥最明显的例 ⼦就是输⼊条件的验证。⽐如说,常⻅的密码要求“必须包含数字、⼩写字⺟、⼤写字⺟、特殊符号 中的⾄少两种,且⻓度在 8 到 16 之间”。 你当然可以绞尽脑汁⽤⼀个正则表达式来验证,但如果放下执念,⽤多个正则表达式分别验证“包含 数字”“包含⼩写字⺟”“包含⼤写字⺟”“包含特殊符号”这四个条件,要求验证成功结果数⼤于等于 2, 再配合⼀个正则表达式验证⻓度,这样做也是可⾏的。虽然看起来繁琐,但可维护性绝对远远强于单个正则表达式。

元字符 

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,元字符是构成正则表达式的基本元件。正则就是由一系列的元字符组成的,看到这里相信你也能明白元字符的重要性了吧。 表示单个特殊字符的,表示空白符的,表示某个范围的,表示次数的量词,另外还有表示断言的,我们可以把它理解成边界限定。

注意:正则是按顺序匹配的,从头走到尾,不会往回走。找一个符合条件的,就会继续匹配剩下的字符串,不会再处理前面的字符串。但是在匹配某个条件时,可能会在符合这个条件的局部字符串进行回溯,这跟前面说的不冲突。

推荐两个正则表达式调试网站:

regex101.com/

c.runoob.com/front-end/8…

思考题

这里给出一些手机号的组成规则: 

第 1 位固定为数字 1; 

第 2 位可能是 3,4,5,6,7,8,9; 

第 3 位到第 11 位我们认为可能是 0-9 任意数字。 

你能不能利用今天学到的知识,写出一个“更严谨”的正则来表示手机号呢?

我的思路:

我自己搞了个公式:对应数字+{次数}

第一位,固定数字1,直接写1或者1{1}。

第二位,是3-9范围内任意数字,说明是多选一,需要加中括号,就是[3-9]{1}

第3到11位,9个数字,数字是\d,再加上次数,就是\d{9}

最终结果:1{1}[3-9]{1}\d{9},次数1的情况可以不写大括号,

所以这个结果也可以简化为1[3-9]\d{9}