00:00
好,除了字符的匹配之外,另外还有一些特殊的用法,比方说这里有中括号,中括号表示什么呢?它表示一个字符的区间啊,也就是说我们中括号里边可以放上很多个字符,表示我们当前要匹配的。这个字符啊,是这里边的某一个,相当于就是我们所说的啊,从这里边去选,只要能。匹配上这里边的任意一个就算匹配好,然后比如说我们这里怎么样呢?哎,中间里边的这些字符呢,我们可以用逗号分割呀,你不做分割,直接就并排写在这儿啊,直接写六八也是可以的,这就表示匹配六或者八这一位,只要是六或者八都可以,那如果是中间来一个连字符呢,零杠九呢,哎,这就表示是零到九的所有字符,那我们知道零到九所有字符不就是数字吗?哎,所以它就是要匹配一位数字。
01:00
然后还可以怎么样呢?零到九后面跟上一个芯,哎,那这个结合使用,这就表示一个数字,然后可以有任意的重复任意多位,那就相相当于匹配的是任意长度的数字串。另外我们还可以匹配,呃,当前就是纯粹的小写字母构成的字符啊,那A到Z这就匹配的是一个A到Z之间的小写字母,如果后面再加心,那就表示任意长度的小写字母字符串啊啊,那对应的啊,我们还可以把这个中间的连字符表示的区间中间再来打断,比方说A-C,然后逗号E-F,那它表示的匹配就是什么呢?哎,就是A到C和E到F之间的所有字符,那就是。ABC加上E和F啊,所以整体来讲这个匹配规则就可以非常灵活的去定义了啊,我们这里可以做一个简单的测试,比如说啊,我们这里还是就跟着这个例子啊,直接R后边加上一个中括号,哎,我们可以匹配A,然后逗号B后边再跟一个T。
02:08
诶,我们可以看到当前匹配出来的就是RT啊,那当然了,我们现在的这个例子里边,它没有存在这个RBT啊,我们也可以用其他方式来做一个测试,比方说我们echo一个比方说RBT后面还可以有任意的东西,那我们说这个可以匹配出来吗?RA。BT,这当然可以匹配出来啊啊,那如果说这里我们前面再再加一些其他的东西,这里R改成at可以匹配出来吗?哎,当然也可以匹配出来,所以就是只要这一位是A或B都可以把它匹配出来。啊,我们这里就是把对应的这个字符echo了一下,然后传递给后面grape了,然后去做正则的筛选,我们发现可以筛选出来。所以这样的话,我们就看到了啊,A和B可以这么去用,当然了,这里这个就是说这个逗号是可以去掉的。可以逗号分割,也可以不加逗号,直接就把它并排的放在这就可以了啊,那当然了,后边我们这个如果有这个AB之后,还可以再给一个芯啊,那如果要这么去匹配的话,当然本身它是可以匹配出来的,另外还可以比方说我们这里给一个a a at。
03:16
这个也可以匹配出来,因为它出现了任任意多次嘛,啊,那我们想到那如果是ABBAT呢,也可以匹配出来,因为它就是A或者B,然后出现任意多次,你是A也行,是B也行,反正中间就是这些字符啊。啊,这个规则就非常灵活。那假如说我们要的是这个R跟T中间有任意的字符串的话,哎,那怎么匹配呢?诶这个我们可以直接用前面的。Password,这里的内容我们现在就不是A和B了,那就应该是A到Z任意的小写的字母啊,然后要做一个匹配,而且长度也任意,那应该加一个星号,哎,这样的话,我们看到匹配的这个中间长度就五花八门,多长都可以匹配的到了。
04:05
那这就是有关中括号,也就是字符区间的使用方式。那最后呢,我们再来介绍一下。斜杠转移,我们知道这个反斜杠它是表示转译的啊,平常不会单独使用,主要就是要匹配一些专门的特殊字符的时候,比方说这个Dollar符,哎,我们知道在这个正则里边,Dollar符本身就是一个特殊字符,哎,你不能直接使用Dollar去匹配Dollar,比方说我们这里可以看一下啊,呃,当然了,当前这个password里边应该是没有Dollar符的,那我们还是看当前脚本里边的。这个daily archive sh,因为它里边的内容比较多,我们可以直接GR一下,假如说我们想找Dollar,能不能找到呢?诶我们看找不到,它直接输出我们所有的内容,因为Dollar它认为默认表示的是结尾嘛,然后你结尾你又没有指定以什么结尾,那当然所有行都输出了,所以假如说我们想要做匹配的话,那应该对他做一个。
05:05
反斜杠的转移,那直接这么写可以吗?哎,直接这么敲也是不行的,我们现在必须要对它做一个引号引起来,而且注意必须得是单引号,前面我们在脚本里边也试过啊,如果是双引号的话,那还是原样输出的嘛,所以必须是单引号才表示接下来要做转移啊,那这样的话,我们看搜索到的就是对应的Dollar符了啊,那假如说我们还想把Dollar符跟其他的一些符号也放在一起去搜索的话,比方说前面还有一个这个斜杠,哎,那这个一样吧,前面再加一个正斜杠,正斜杠不需要转移,我们直接搜就可以搜到对应的字符串。这就是我们有关这个正则入门的一些基本的介绍啊,当然了,在实际使用的过程当中,可能正则还有其他更多的规则啊,当然了就是有一些规则呢,可能是一些工具里边不太支持的,因为有一些是扩展规则,比如说大家大家可能见过这样的用法啊。
06:05
加一个花括号。啊,就比如说前面我们给一个A,然后后面呢花括号二,这表示什么呢?这其实就是表示A出现两次。就是要匹配AA啊,但是这个花括号,这是扩展的正则规则,所以有一些啊,比方说你直接用这个grape去去使用这个的时候,它是不生效的啊啊,那所以我们其他的那些复杂的扩展规则就不再去介绍了啊,那比方说扩展规则里边还有这个加号,哎,还有问号,可能有些同学也见过啊,正则的这些表达式,这个区别就在于它跟星儿其实差不多啊,星我们说是匹配任意多次嘛,呃,那它是零次,一次或多次,而加号呢,就是一次或多次。就没有零次至少得出现啊,而问号呢,问号是零次或一次不会出现多次啊,这个就是一些简单的区别,感兴趣的同学可以下来之后再详细去查验一下啊,但是那些就属于是扩展的政策规则了。
07:03
那接下来呢,我们来做一个比较具有实际意义的扩展实践啊,那就是我们可以用正则去匹配一个手机号,诶这个在经常很多地方都会用到啊,就是匹配一个我们当前什么样是一个合法的手机号,一串数字,诶那我们知道啊,国内的手机号一般都是11位的。然后它的规则呢,是开头第一位必须是一,然后第二位呢,诶有一个选择范围,既然是选择范围嘛,那我们那个字符区间用中括号表示,中间就是三,有可能是幺三几,幺四几幺五几。幺七几幺八几3534578,只有这五种选择,这是第二位,那剩下的九位那就随便了啊,就只要是数字就可以,那我们就想到了,那数字的表示其实是。零到九对吧?呃,是这样的一个表示,然后后面呢,就每一位都是零到九,零到九零到九,这样的话就可以做一个手机号码的匹配,哎,我们这里可以直接就在这里来做一个测试啊,控制台我们直接来做一下,比方说我EQ一个手机号。
08:11
呃,我们这里随便写一个啊,比方说13812345678,这显然是一个合合法的手机号,然后我们接下来使用grape,然后去做一个正则的匹配,那我们这里边需要怎么样去写呢?呃,当然了。首先直接就开头应该有一个上千号啊,开头肯定是一,接下来呢,肯定就是一个中括号,就是34578啊,那后边呢,后边每一位都是数字,那就是零到九啊,那接下来怎么办呢?接下来我们就知道了,第三位是,那后边其实都是这样对吧?诶所以接下来呢,就是第四位,第五位,第6789,所有的都是这样的,表示总共11位符合这个规则,这就是一个合法的手机号,诶我们看这个匹配有点不对啊,我们好像少了1234567啊,只有后面只有七个位数啊,后面还得继续来八九,而且我们这里应该再加上一个。
09:09
高尔夫表示结束啊,最后是要结束才能表示我们当前是完全合法的,然后现在这就是一个完整的匹配,这个号码是完全正确。那当然了,我们会想到,呃,前面如果我再多加一位呢,假如说误打了一个零,哎,那当然就没有匹配了,不正确,那如果说我们当前换一个号。换成159打头的。啊159。当然也是一个合法的手机号了,大家就会发现啊,这种标准的匹配方式肯定是太复杂了,对吧,你这后面直接这个有好多个零到九,能不能直接就重复呢?诶可以重复啊,重复的这个写法,那就是前面我们说的,诶直接可以零到九,哎,它重复几次呢?我们这是精确重复,不能使用星号,星号是任意嘛,我们现在就是重复九次,可以直接花括号九,但是要注意你直接这么写的话,它匹配不出来。
10:04
因为当前这个group默认是不支持这种扩展的划括号这种匹配方式的,那怎么办呢?我们可以加一个杠E,杠大写的E表示支持扩展的正则表达式,哎,这样的话。诶,我们看就可以匹配到了啊,所以这种写法就会更加的方便一些啊。当然了,大家可能见到有一些工具里边,或者有一些文档里边,会它有更加简洁的写法,就是比方说这个零到九这个数字,它可以直接把它简写成一个D,哎,那就这里就直接写一个D,然后后边画括号九就可以了,哎,但是现在这个grape是不支持这种写法的,所以我们写成这个样子,这就可以正常的去筛选一个手机号码了啊这就是关于正则的入门这一部分,我们就先讲到这里。
我来说两句