00:00
大家好,欢迎大家继续收看上硅谷的云计算课程。我是沈超老师,这节课呢,我们来学习这个剩余的这几个正则表达式。这几个啊,看的格式比较别扭,看大括号左侧的这个斜杠其实是转移符,也就是说它把大括号变成了普通字符,后面这个N是数字。那这样写,它代表在这个前面出现的字符,比如说前面有A重复了大概刚好三次,或者是几次,N是几次就是几次,这个是大于你的N次,这个是大于N次,小于M次,啥意思?举个例子。我们往下看它的绿色啊,我们看一下。这里我们说你看我可以这样来搜,在这个text文档里搜A字符重复了三次这样的符号来,那我们可以试试啊,Gra a字符重复。三次。反斜杠大括号啊,目的是为了把它括起来,然后呢,这个test test这个文档再说啊,这是转移符啊,目的是为了把大括号变成普通字符,好这样的话你就会发现啊,我会找到里面三次以上的啊,四次的也有。
01:16
对吧。但是少于三次了,就一次的找不着。那有人说,老师,我何必要这么写呢?我要找三个A,我直接写三个A不就完了吗?对吧。哎,看我的结果是一样的。对吧,我这样是不是就可以找到三个A。对不对,那后面这个呢,说是找N次以上的,那我要找三次三个N以上的,那我怎么办?在这里啊,看在这个里面,N次以上是这里加个逗号,它代表三次以上,看这个刚刚啊,我们找了这个,看虽然四个A也列出了,但是第四个A没有变红,它证明我找到的只是前三个A,只是它刚好是包含匹配,就四个A刚好还有三个,所以它也列出了,但这样写,你看四个A也变红了,它就指的是三个A也行,四个A也行,都算在零,那有人说老师,那我要找三个A以上的,我也没必没必要这样写啊,你看我我们前面讲过星号了,我是三个A以上再加个A星。
02:17
前面是不是代表三个A,后面的A星是不是代表重复零次,到任多次是不是也是一样的看。是不是也都是变红的,没错吧?换句话说,有些学生会觉得老师我何必要把就是我要找这个A重复多少次以上,我何必要这样写,我直接写这个普通正则或者加星号不就完了吗?各位,没错,如果我只是想找一个字母,那么这样写。远没有你直接写字母和或者用星号的方式来替代它要方便。但是。如果我要是想找数字怎么办?我想要找数字,我这里写的是我想要求我要查查找这个任意数字,重复三次以上,三次啊,哎,这个是就是重复高考多少次。
03:08
如果你要不加纤位符,它是不是就是包含匹配对吧,那就是三次和三次以上都算进位,但如果加了纤位符这个事儿啊,它就是三次,那各位我们试看一下,我先看看这里边有什么,看我这里是不是有个三次了。然后有四次的,有两次的,有一堆次的数字对吧,那你看我如果要是按数字来写字母,我刚刚说了,它如果是字母,其实用这个方法还不如用就用用这个方法还不如用这个方便,对吧?但是如果要是数字的,我要查找三个认定数,那你怎么办?我是不是就得这样写零到九,这是不是代表一个人余数再来一个人余数零到九?再来一个任意数,任意到九,这时候才代表三个任意数,那要查十个任意数,你怎么办?这得写十遍,麻烦吧?那这样能啊,你看我会找到三个认知数,当然啊,各位,我再说一遍,这是含有匹配,对吧?你只要是含有三个数,哪怕是四个数,哪怕是一堆数,它也会列数,如果你要真的不想让它这个这个什么,那你就得加千位符,比如说我要找的是三个数开头。
04:21
前面加个行首,后面呢加一个任意字母,在三个数字后面要跟任意字母。哎,开头的目的是为了排除这个。对吧,那加任意字母的目的是为了排除这个,我就要三个数开头,我就要三个数开头,那这个时候看加限位符这个数就可以了,这就是三个数刚好就三个数对吧?三个数开头后面加一个字母对吧,那这个时候我说。如果这样写能找到三个数,但是我说不方便写这么多,那要是十个数呢,但是也不方便,更不方便,那这种情况下各位写成这样就更合理了,看着反斜杠大斜杠反斜杠反斜杠大括号,然后找三个数。
05:06
这样写。远比通过这样写方便。关键啊,我们有时候可能不是查三个数,我们可能常见的,比如说查手机,我们查是九个数,九个数你写九遍,这个我问你是不是肯定还得这样写方便对吧,那这样写看作用是一样的。OK啊,注意啊,这样写的作用是查找刚好是三个的这个符号,但是你记得正则一直在说是包含匹配,包含含有就列数,但如果前面没有限位符,后面没有限位符,就会出现刚刚这种情况,找三个数没问题,是找三个数,但是四个数里面含三个数吗?六个数里面是不是也含八个数里面是不是也含三个数,所以都会列出。OK,那如果要求刚好只是三个数,无论是你通过这种方法还是通过这种大括号的方法,都要加三位数,记得这个事儿啊,要不然这个三位数和大于三位数就没有什么区别,三位数和大于等于三位数就是一样的了,因为它是含有你左右两侧要限制它的这个符号存在,OK,好,各位,那这就是到N的作用。
06:14
查找这个数刚好连续出现三次,或者这个字母它前面这个字母,或者前面这个数刚好连续出现几次,刚好几次,当然我再说看这个的例子啊,也是刚好要想让A出三次是吧,你前后就要加幸运符,这里的意思是在三个A前面。要不然是S,要不然是U,哎,中括号吧,两个里面选一个结尾呢,要不然是I,要不然是L。哎,这样的话就把其他的就是包含三个A的就排除了,对吧,那这个也是啊,这个我们就说了这种写法,它就会干嘛干嘛,它是不是就三个,虽然是三个连续的数,但是四个数也包含三个连续的数,它也会列数,所以它的前后就要加限位数。
07:00
加了线位符,它的含义才能真正体现出来,这就是刚好是三个连续的东西,就是刚好是三个连续的数,你前面写的是什么,它这里就是三个连续的什么,明白了,所以记得正则始终要记得它是含有匹配啊,要想看到它刚好是三个一前后就要有限制它的符号存在,OK。好,这是N的作用。啊,这个反斜杠大括号N的作用,它的作用是前面的字符恰巧出现N次。那如果在这个N里面加一个逗号,它的作用就是不小于N次,其实就是大于等于N次,这里写三,就是三次以上三次和三次以上三次57都行,明白吗?那也就是说刚刚我看我这里看我这里写了数字开头刚好三个数,后面接字母,那如果我这里要加个逗号呢。它指的就是三个,只要是三个数或三个数以上就行,那我们就可以看到,看四个数,他这回是不是就也找到了。
08:02
对吧,这就是逗号的作用,大于N次,大就是不小于N次,就是大于等于N次,哎,这样写就是会匹配数字开头的这个这个这个这个最少连续三个数字,四个数五个数都行那。如果这样写他的意思。前面要不然是S,要不然是U,后面要不然是I,要不然是L,中间呢,最少三个A,四个也行,五个也行,三个A以上,这就是反斜杠N的作用啊,逗号各位我再说。这种写法一般不会用来匹配字母,为啥你这里非要在这里,比如说你看我这里试一下,你看我这里看一下,看一下为啥写这个东西啊,你看啊,我这里有一个said。多和U。Lu中间有一个AB对A,那我们这里的意思就是啥?看graph双引号,然后呢,这个A字母就是中括号S,要不然是S或者是U,也就说要不然是这个A前面是S,要不然A前面是U。
09:09
看到啦,然后呢。结尾呢是要不然是I,要不然是L,看这个结尾刚好是,这个结尾刚好是对吧,中间呢是然后呢重复。重复三次或三次以上,我看到了,那这个时候gra test一下,看我这里是不是就能找到这个句子。对吧,只要是S和A之间有三个以上的,那这里只有一个AA,它就不会列出,对吧,但是我就说这种写法其实不方便。我说如果我们只是单个字母想重复三次或三次以上,我们还是推荐这样写,就是看三个A对吧,再加个A星,这就是三个A或三个A以上单个字母用这种方法还是更好写,但是我们说数字你就没办法。
10:03
数字你要写三个数就得写这么一串,九个数就得写九个中括号,还不如这样加这个反斜杠更方便,OK啊,所以啊,这种写法我们一般包括就主要还是超过这自己啊,最少常见还是一般是用在这个数字写法上,字母的话,我可能还会这样来写,OK,但是这个作用是一样的啊,它的作用是一样的,OK,好,这是第二个。这个前面这个字母或者数字重复不小于N字。而如果这样写,它就是出现大于等于N,小于等于M,比如说我这里写S后面有AA,这呢最少有一个A,最多三个A后面加,哎这个也行,那你看到他就指定了一个范围,那我们可以看到。S。S后面加AA呢,反斜杠大括号,反斜杠大括号。
11:00
然后呢,一逗号三啊这个A。在这个S后面的这个啊,加个I加个线位符,那好在这里派这个S和I之间的。A,要不然出现一次,要不然出现两次,要不然出现三次,那我可以找到,看这里有找到了一次的两次的对吧,那其实我这里啊,我cat一下,我看一下我这里还有还有什么,还有四次。对不对,但是我这里限制了这个字母只能重复一次到两这个三次,所以四次的没有列出对吧?哎,这个可以指定一个范围。哎,这就是这个例子,看明白了吗?那各位。我们这就是基本正则这里看到了,这里的作用是指前一个字符恰好出现几次,这个值是大于等于几次,这个是大于N次,小于大于等于N次,小于等于M次。
12:03
那这个东西到底是干嘛的呀,我讲了这么多匹配的东西,它到底是干嘛的呀。各位,这做学起来很痛苦,而且一点也不方便,那我们说我们到底用它干嘛呀?各位。这个东西我们说它其实是做模糊匹配的,哎,做字符串的,它主要是用来做字符串的模糊匹配的,字符串的模糊查询的,那为什么要做这个呢?各位我提醒你一下,我问你一下。比如说我们在网站上经常有这样的需要,比如说什么我要求你来输入一个手机号。我要求你输一个身份证号。我要求你输一个邮箱地址。有吧,那我问你,如果你乱出一通,能不能通过?各位,比如说手机号,我们的手机号都是11位的,你输了个十位,这个家伙肯定就过不去。
13:02
明白,那他怎么判断你是错的呢?通过了就是正则,比如说常见的手机号看第一位是一,第二位是三和八,哎,手机没有101112开头的没有吧,我们都是幺三到1415,幺六,171819啊,其实幺九的也很也没有,就幺八开头都有。后面的九位数是零到九,任何数总共是11位数,用这种方法来模糊查询,目的是干嘛?做粗略过滤?比如说你要要求你输入手机号,你手机号一定首先得是11位,其次第一位一定是一,第二位绝不能是012和九。哎,这后面的位数你可以随便说,换句话说。你们输那个邮箱,包括你的身份证号,包括这个手机号,他都是先拿正则来过一个做一个粗过,也就说啊,你如果明显的不符合规则,它是不允许你通过,比如说你输入手机号,你输了个十位,他就根本就不允许你下一步他是怎么判断的,就是靠正则判断你里边写的东西干嘛。
14:11
有多什么,有没有多,就是它的基本规则是不是符合,但是我说如果你知道了这个原理,它要求你手机号你就干嘛,你就第一位数一。第二位呢,数二四除三到八之间的一个数,后面数九个数,你随便编一个他就能过了,原因它正则只能做粗。哎,粗了,我就只能高要求你做这样一个格式,但是你只要符合格式里面的东西,我就没办法判断,那里面怎么判断。现在的网站为了保证你的手机号不乱输怎么办?他要求给你发验证码,你乱输一个其他手机号发验证码你输不着,你知道嘛,注册不了,他通过这种方式二次验证来做精确过滤,但是啊,我不能说你随便编个数,你比如说你编个十位数,明显不合规则,我也要给你发验证码,发验证码也是要钱的,虽然我们现在这种有接口啊,但是他也要占资源嘛。
15:07
对吧,所以正则是用来做错略。我先把这个明显的不合格的东西过滤掉,比如说也就是用来过滤手机号,过滤邮箱,哎,我们的邮箱是不是一定是前面一个一串一串字母,后面一个艾特符号,然后比如说163.com一定是这样的命令结果。对吧,那如果你要明显的不是这种格式,那我是不是就先把它过滤掉对不对,然后再说经过率,比如说你给我给了邮箱,我给你发封验证邮件,你给我这个点回复,我验证邮件上有链接,点了才能完成去注册,对吧。但是啊,还是这句话,发邮件也是要耗资源的,我不能说是你明显的显得不合格,我都让你通过,这就不合理。所以正则再说一遍,这个东西为什么说要匹配正则啊,这我们在工作中最常见的这个应用,它是做字符串模糊匹配,或者说字符串粗过滤了。
16:06
不能说模糊,其实模糊查询这些都是模糊查询,就是我记不清他具体是什么,我只记得他这十个数,11个数这样的模糊查询,但是它只能做粗。诶,我做一个大概的规则,这个规则写的越好,我后期这个无效信息就越少,对吧?哎,常见的就是用来过滤什么手机号啊,身份证号啊,你的邮编啊等等啊,或者这个包括这个邮箱啊这样的东西都是用它来过滤。明白了。而。我们不会拿事来写网页。不会对吧,但是啊,事中有一个特点,就是我们有可能需要读取文本中的数据。文本中的数据。文本中的数据,文件里的数据,那这东西是不是也是字符串对吧?那这种情况下先用正则干嘛,做个粗过滤。
17:00
比如说我就是想要要求,比如说我就想这个读取这个。包含root的号。对吧,那么在他做这里,我想看看系统中有多少用户有这个入册用户的信息。或者我想在这里面找找这个普通非非入的用户。哎,我想在这里边找我的普通用户对不对,那我这时候是不是首先就要先通过政策把这东西过滤出来,对不对,那怎么找普通用户啊,我们看一下pass的,看这里面首先你要先看第一件事,首先有入存用户,其次有一堆的伪用户,哎,我的系统恢复快照,那我添加一个普通用户。有。我先不设密码了,我就签两个就行,好吧,那我现在我现在要做的事情是,比如说我要写一个什么程序,把我系统下所有的普通用户都删掉,我这里面假设建立1000个普通户,或者要建立1000个普通用户,对不对,那我这个时候首先要做的是不是就是在passor里面干嘛过滤出来普通用户对不对,那怎么过滤啊,首先我先要搜这个东西。
18:12
为啥?这是所有伪用户的特征,各位?各位。或者说我们应该搜这个,应该是这样,只有能够登录了普通用户和超级用户,他的登录Sha尔是不是才是并下的被试,而我们的伪用户是不是都是下的no log v对吧?那我们这样我先干嘛把伪用户过滤掉,我先在里面干嘛?我先找包含有病下的被试。对不对。在这个,呃,帕。对吧。哎,一切四下怕错了。我是不是先找包含有这个的对吧,然后呢,我们干嘛,我是不是就应该过滤这个root用户对吧?过滤root用户哎,那我们就不对了,那我们就应该先找root用户干嘛,看着为啥格要取反嘛。
19:08
啊,要取反先取先不取反,那我们就这里看,找先找root用户,包含有root的用户,ETC下passor。好找到了这个对不对,然后那我们把它取反。啊,其实无所谓哪个先写都一样,那我们现在取反啊,刚刚是不是找包含有root的用户。现在取反我是不是就找到了,不包含有root用户,再在这些这个里面管道符里面再去提取什么并下的被试,包含有并下的被试了,这样找到了就是普通用户。然后再把它的用户名提出来就行了,诶通过它的特征是不是来过滤我想要的字符串,那这就是我们写事的时候。我们正则的作用是干嘛?我们因为需要读取文本里的数据,而文本的数据如果需要过滤,我们就需要干嘛用到正则了,各位。
20:02
听明白了吗?我在讲正则是干什么的?在最好理解的就是正则是用来在网页上来过滤你的用户输入的,因为我要求你用户输手机号,有些用户不听话,他就非部署,那我就要用正则先做一个粗过滤,把明显不符合规则的给过滤掉,然后再通过其他方法,比如说手机验证码的方法,再做精确过滤。而我们在事中,我们虽然写不了什么网页,但是我们需要有大量的文本需要进行处理,那文本要想处理的时候,那我们就需要用正则先来做负过滤,哎,其实这里我们过滤普通用户的这种方法,其实就是一个正则的方法。就是政策,我先把root用户以外的排除root用户,因为我要删,不能把root用户删掉嘛,我要的只是普通用户嘛,先把root用户给排除掉,然后呢,再在里面包含查找它的登录,Share是标准share的,而不是就是系统登录,就是系统自带的那些伪share,对吧?那这样的话我是不是就可以得到普通用户,这只是一个举例啊。
21:07
我们后面有大量的文本需要进行处理,那正则就是必不可少的这样一个工具,OK,好,各位,其实我说绝大多数在脚本当中,我们的正则其实就是这样,就写清楚,我要搜了字符串实实就行。而我们今天讲的这个复杂的东西呢,在特殊情况下有可能会用,在绝大多数情况下可能用不着这,但是这个对所有的程序员来讲都是一个难点。包括我们学专业程序,我不止一次的记得我们给我们的这个程序员就讲Linux的时候,第一天讲我们,因为我们因为我们linus课里面会用到一部分政策,我就问星号是什么,全班都会异口同声的告诉我,代表任匹配任意内容,我就恨不得一个大嘴巴抽死他。OK,匹配认定内容是通配符的作用啊,正则里的作用是前一个符号重复零次到认定多次啊,绝不是一回事,OK。
22:01
好,各位。基础正则我们就说到这儿,各位,我们上中能识别的基础正则就这样一些,好,那这些东西呢,可能还是要多练,你牢牢记住正则的核心的特征就是包含匹配。就是韩有就会列出,牢牢记住这句话。好了,那这节课呢,就是这样,我们下节课再见。
我来说两句