现在我们来看一个很重要的知识点叫正则表达式,我们可以把它看成是一种查找规则,他的作用就是帮我们匹配指定规则的字字串。 正则表示在计算机上的应用很多,比如我们用的拍像,他会自动匹配我们写的关键字正确,不同关键字设置成不同的颜色。当我们注册账号的时候,网站会用正则判断密码的复杂程度。在爬窗里面我们也会用到正则,提取我们需要的数据,甚至我们平时在用各种编辑器的时候都可以用到正则。我来跟你演示一下,我先让你体验一下正则的强大之处, 一会我们再详细的来讲政策怎么用。我这里准备了一段文本内容,对于这段内容可能了解过爬山的同学会比较熟悉,我们现在要把这段内容改成字典得势,如果按照我们正常改的话,可能就只有一个个手动改了,就像这样 是不是很麻烦,但是有了震折之后就不一样了。首先我们按 ctrl 加 r, 这个是拍项目替换的快捷键,然后我们点击这 个点心号,这样我们就打开了正着匹配了。现在我们就可以在这里写正着表达式了,你先看我写,先,不用关心我写的这些含义是什么,一会我都会教给你, 现在我就写好了,然后我来点击这个 replace 哦,你注意看效果,这样是不是一下就改好了?接下来我们就来具体讲解一下正者表达是怎么用。我在这里准备了一段英文, 不过他这一行太长了,我们可以设置一下自动换行,打开 ct, 然后直接在这里搜 rap, 选择这个 soft rap, 点击右键添加快捷键,比如我就按艾特加 z 点击, ok, 现在我们就可以通过艾特加 z 来控制是否自动换行了,然后我们同出加 r, 把这个替换功能调出来,注意这里的点心一定要点亮才可以使用正常表达式。 然后我们可以在这里输入任意形式的表达时,被成功匹配到了,文本就会高亮显示。我们先来看正者表的是最基础的用法,限定服, 我们在这里输入我们的第一个正常表达是 xy 信号记信号表示他前面的这个字符外可以有零个或者多个,就是匹配的时候外这个字符可以没有,也可以有多个。我们可以看到下面高亮显示的这一字不算,就是我们的这个正常表达是成功匹配到的内容, xgxygxyyg, xy yyg, 但是没有匹配到这两个,因为我们这个政策表达是明确规定的,只能出现零个或者多个外。然后我们再来看第二个限定服加号, 他表示前面的这个字符可以出现一次。以上和信号的区别是信号可以匹配零字或者多次,而加号只能匹配多次。如果我们直接把这里的信号改成加号的话,我们可以看到第一个 x g 就没有被匹配到了。如果我们要更精确的指定一个字符出现了多少次, 比如我们要指定这里的外出线次数为五次,我们就可以使用大括号,然后在大括号里写五就可以了。同时使用大括号我们还可以指定一个范围,比如我们喜欢外在 这个字母出现的字数为二到五次,我们就可以在他括号里面写二到号五。如果我们喜欢外这个字母出现的字数为两次以上,我们就可以直接省略这个五。然后我们再来看最后一个限定符问号, 我在这里输入耐克斯问号,这个问号表示他前面的这个字符 s 需要出现零次或者一次,就是说匹配的时候 s 这个字符可有可无,这样耐克和耐克斯就都被我们这个动作表达是匹配到了。
粉丝5.4万获赞36.9万


接下来我们看一下如何针对次服串这一类的数据呢,进行模式匹配。 那么在思考中呢,提供了一个运算符叫做 like, 专门用于进行自伏串的模式匹配,那么模式匹配实际上就是相当于对自伏串进行一种模糊查询,我知道自伏串中的某一些内容呢,但是我不确定整个自伏串, 这个时候呢,我们可以使用 like 来判断他是否符合我的某一种模式。那么既然是模式匹配呢,那么可能需要定义这个一些能够代表这个模糊概念的一些字幅串。 在收口标准中呢,他定义了两个,一个是百分号,那么百分号他表示呢,我可以匹配后面这个任意多个字幅串, 不管他是什么。另外一个呢就是下划线,下划线呢就表示呢,我可以匹配呢一个确定的一个自负差,但是是什么呢?他是不确定的。那么这里呢, 这个 like 啊,孕妇服也比较简单,也是使用在这个 wy 条件中的,我们直接看一些这个 效果中的视力, 这里呢我们用的是这个精确掌掌,这个就是说 last name, 他是精确的等于什么?那么我们来看一下,比如说我们想看这个 first name, 他大概是一个什么 like, 这个 我们是以这个 ja, 也就说我们前面两个字符呢,是一个 j, 一个 a, 然后呢后面是什么呢?我们不确定,我们看想看一看大概满足这个 模糊的这个数据有多少,这里我们可以看到所有查询出的这个五条数据呢,都是以 j 开始的,那后面是什么呢?不一定,这个字符的数量不一定,字符内容呢也不一定,那么这就是这个模糊匹配这个百分号它的一个作用。 那么我们可以在这个再换一个数据后,再看一下这个 另外一个下划线它的效果。比如说我想看这个 this name, 他等于这个 我知道他其中的一些内容,但是呢有一个字符我不确定,那么这个呢,就说这中间是什么我不一定都可以。 这里我们可以看到我们匹配到了两条数据,其中一条呢中间是一个一,另外一条呢中间是一个 u, 当然他还可以匹配其他的任意的其他这种字符, 这就是表示这个下划线呢,他能匹配确定的数量就是一个,但是内容呢我们不确定, 这个下划线和这个摆放呢,当然也可以这个进行一些组合使用了。那么简单来说呢,这个 模式匹配,简单的模式匹配就是这样的,然后呢我们需要看考虑一个问题,就是说我们说这个 下划线和百分号呢,他都有一些特殊的意义,对吧?那么如果我的数据中本身就有下划线,或者是我的数据中本身就有这个百分号, 那我怎么匹配这个下划线他自身或者是百万号他自身呢?那么这里呢我们需要引入另外一个概念。我们先来看一下, 就是说对于这个耐克这个模糊匹配呢,如果我们想要这个匹配这两个特殊的通配符,我们称为通配符, 匹配他他们自身,那么我们需要使用另外一个叫做转移制服这么一个概念, 也就是说呢,我们通过这个定义一个转移字符表示呢 这个转移字符他会将我们这个百分号或者是这个下划线进行一个转移,那么他就变成了一个普通的字符了,也就是他在匹配的时候呢,不是一个通配符,而是这个普通字符他自身。 那么我们来这个看一下,这个如何应用一个这个普通的字符呢?来匹配,这里我们看到这个有一个失利,我们这个 y 啊,在我们这个数据中呢是百分之二十五, 那么这个摆放号呢?它是一个普通的摆放号,是我们的数据 like, 我们看一下,我们先不考虑这个转移字符,没有这个转移字符的情况下,如果我们想匹配这个,实际上我们找的是二十五井号后面跟任意的内容, 因为这个百分啊,他是一个特殊的,实际上我们是不能匹配这个数据的,因为这个不是二十五加紧号开始的。如果我们想要就是匹配这个百分之二十五呢,也就说我们想要在这个模式呢里头呢,把这个百分号当成一个普通的数据来使用, 那么我们需要加一个所谓的 excave, 他是转印字符,表示这个井号呢,他起到了一个转印的作用,把我们这个百分号转成了一个普通的一个东西。 那么这个模式表示我们匹配二十五后面跟一个普通的摆放号,也就是我们这一条数据,那么这个呢,我们可以来看一下, 可以看一下, 比如说我们这个 刚才我们说的这个,先来看一下这个百分之二十五, 如果我们说二十五, 请看,或者说我们要数这个百分号, 这样吧,当然我们如果是这么写的话呢,实际上他也是可以匹配出来的。我们看一下这是会有数据的,因为我们这个 百分之二十五呢,他实际上是二十五打头的任意制服,那任意制服也包含这个百分之二十五,但这种情况下呢,我们也可能匹配到,比如说百分之 二十五点二,别说我这种数据,实际上你看我们查询结果也是有很多结果的,也表示说我们不仅仅匹配到百分之二十五,我也可能匹配到了一些我们不想要的数据。那么如果我们只想匹配到这个百分之二十五呢? 那么需要使用一个,比如说我们用井号做一个转移,然后呢 skip 一下这个情况呢,它是一个特殊字符,那么这个时候首先我们看当我们提供的是百分之二十五,它能匹配,但是如果我们换一个百分之二十五点二,这个时候呢它是匹配不到的,因为我们这里是 精确匹配百分之二十五,而你这里不是,这就是转移字符的一个效果。那么我们换一个,我们同样可以这个看一下这个下划线, 这个下划线它转移之后的一个效果。在这里我们要用另外一张表 drops, 用这个 drops 表里有一些数据呢, 他是有这个,我们先查询一下这个表,我们可以看到这个桌板 id, 他是带下划线的 这个看一下这个找白的耐克 这个比如说我们就这个 ad, 井号小线 dp, 假如说我就想匹配这个,实际上我就想匹配这个 ad, 这个 vp 啊, vp 对, vp 写错, vp 这个数据 如果这样写呢,我们是没有任何数据的,因为他匹配的是 ad 这个井号,这个下划线表示任意字符,然后后面跟 vp, 实际上这样的数据是没有的,那么怎么办呢? 也是转印一下,我们把这个井号做一个转印, 这样呢 我们看到我们匹配到这个 ad 下划线, vp 也就是这个下划线呢,他实际上在我们这里呢,匹配的是一个普通的这个下划线,有这个井号呢,对他进行了一个转移, 这就是这个转移字符的一个使用。那我们来看一下这个六种数据和产品,首先来说呢,他们都提供了这个 saco, 这个奈何运算符都可以使用百分号和下划线, 实际上呢不仅如此呢,他们都提供了一些额外的更加强大的一些自负匹配。我们知道这个政策表达是他是一个非常强大的功能,因此呢很多数据库都提供了 这种政策表达式的一些扩展。 除了 这个,如果大家对这个扩展的正在表达是感兴趣的,可以去看一些相关的文档,因为这个这部分内容呢,这个就是功能比较强大,也比较高级一点。这里呢我们作为入门课程我们就不一一介绍了, 但是我们还需要注意一点,就是说我们知道字符数据对我们来说呢,实际上是区分大小写的, 对吧?就是说你你这个大写的 a 和小写的 a, 他实际上呢是两个字符。 那么有一些数据库呢,在匹配的时候呢是区分的,比如说像这个 r 口啊, pg 和 db two, 他们是区分的,也就是说如果你用小写的 cad, 他是 不能匹配这种大写的 c 开头的这种,但另外三种数以后呢,他是可以的。这个我们可以看一个例子, 这个首先我们说刚才我们查询的这个,这个 ja, 这个大写的 j, 小写的 a, 开始的这个我们能查到这个数据。如果我说我们用小小的 jja, 我们首先看一下 mac 口, 我看到这个执行一下,他仍然是可以匹配到这些数据的,但是呢我们把这个考过来,我看到刚才我们说了欧尔考,他是区分大小写的, 查询一下他没有任何数据,也就是说他需要匹配,你必须得写成准确的是一个大写的 j, 这样的话呢他才会出现这些数据,因为他是区分大小写的, 这里呢正好是三种数据库,他区分大小写,另外三种数据库呢?他不区分大小写, 大家使用的时候呢?如果有这些问题呢,需要知道是原因是什么?

大家好,我是老吴,欢迎观看 excev b a 入门开窍课程,这节课是正则表达式的第十七节课,我们在这节课学习后向引用。我们先来看下这个案例, 这个案例中我要找到祖籍和现居地一致的单元格,然后把这个单元格标成红色,像这种祖籍台湾,现居台湾的话就标红色,像这种祖籍浙江,现居北京,就把它排除掉。首先来看下效果, ok, 就找到了这个效果是如何实现的,我们先不用这个案例来讲解,我们先用这个测试数据来演示一下,我们先把它放到测试工具里面,我现在要找的就是这种,前面这个型号呢,和后面这个型号是一致的, 我就把它匹配上,像这种啊,前面和后面不一致,我就把它排除掉。首先我们来描述一下这个,第一个是字母,我们就用这个 a 到 z 啊,拿大 a 到大 z, 我们写的全一点, 然后是四个数字,啊,这些都是四个数字,所以我就用杠的,然后限制一个次数,四次测试一下。 ok 啊,这些型号呢都被匹配上了,现在我要匹配前后呢相同的,这个怎么办呢?好像我们之前并没有学过这样的知识,如果我们只是把这个复制一下,就表示前面一个型号,后面一个型号,然后 中间这些东西呢,我们就用点啊,这个点呢几乎代表了任何的字符,然后加号一次或多次,然后再来测试一下。好,这个时候呢,他整条都匹配上了, 好,我们这样匹配呢,前面和后面这个只是说他的格式是一样的,就是一个字母带着四个数字,但是并没有告诉正则,这两个需要相等啊,这种应该怎么写 啊?今天我们就来学这个,首先我们需要用到分组,我们先把这个前面这个先用括号把它括起来, 好,后面这个东西呢,我们就把它删掉,这些不要,然后我们输入一个杠一啊,再来测试一下, ok, 我们发现 前后相等的就匹配上了,而前后不相等的就没有匹配上这个杠一的意思呢?这个不是代表一本身,而是他是有含义的,这个一代表着前面这个括号啊,就是说 前面这个括号的内容在这个地方出现了重复。比如说拿第一个举例,前面这个括号里的呢,就是一个字母带了四个数字,然后点 加一次或多次,几乎代表了任何的支付串,就代表了这四个中文。然后在这个地方出现了前面这个分组的重复内容,也就是这个啊,然后整体就能匹配上啊,这个一代表的是 第一个括号里的内容,如果这个地方写二是什么意思呢?就是说第二个括号的内容,比如说在这里也有个括号,因为有的时候呢,我们前面需要一个分组匹配, 然后后面呢才是这个后向引用,如果是这种情况呢,你需要后向引用第二括号的那种,你就写一个二就可以了。好了,我们现在把案例中的字符串复制一下, 放到测试工具里面。好,我们第一步就是找祖籍后面的地名,然后后向引用,在后面的制服串里面找相同的制服。好,首先我们把 这个祖籍拿下来。好,然后括号里面呢,我们就用一个一道盒 一道和,因为这个地名呢,有两个字的,三个字的啊,如果碰到内蒙古自治区啊,这种文字就更多了,所以我们就一次或多次啊,来测试一下。 ok, 这个时候呢就匹配上了 啊,虽然是整体匹配上了,但是我现在分组里面呢,只会有定名。 ok, 然后我们在描述中间这些东西,比如说这些逗号啊,或者说空格啊,这些现居啊,什么什么啊,很多不确定的因素,我们都 都用这个点,然后一次或多次啊,或者我们换成这个新号,零次或多次,就是这个线距地呢,就算是跟他贴在一起的啊,都可以识别。如果我们写加号呢,就是说中间一定至少都要有一个啊空格,或者说有一个其他的字符。 好,接着呢我们就可以输入杠一,然后就代表前面祖籍两个字,然后后面跟着是地名,地名 中间可能会有字符,可能会没有字符,然后在这个位置出现了前面这个地名重复的字符 来看一下。 ok, 我们就找到了祖籍啊,这个祖籍江西县居地也是江西啊,祖籍黑龙江,县居也是黑龙江 啊,后面这两个呢都不是排除掉了。 ok, 那正则表达式呢,我们就已经搞定了,我们把这个复制一下,我们来看下代码 啊,这个代码跟我们刚刚写的这个正折表达是呢不一样,所以说每次写正折的时候呢,都有不同的思路啊,这是我之前写了个正折,我们现在用刚刚写好的正折呢,把它替换一下,用这种呢也可以。 ok, 我们来运行一下啊,这代码呢,其实就很简单了,好,循环, a 一到 a 七单元格就是这些 好,每次循环的时候呢,进行判断, past 好,如果能匹配上,就把当前循环的单元格标成红色 啊,第一个排除啊,第二个啊,我先把这里先还原一下颜色, ok, 就标红了,然后循环第三个排除啊,第四个标红 好,再循环啊,第五个标红好,接下来两个都排除, ok, 大码结束。 这节课呢,我们先引路后向引用的一个方法啊,并且结合这个案例呢,来演示一下效果。下节课呢,我们再用后向引用的方法来做一个案例。 好了,那这一节课呢,就讲到这里,感谢各位看官的支持,你的点赞是我继续创作的动力,关注我,下节课我们将学习新的内容。