温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
我们现在已经了解了CP当中的个体模式和组合模式,一般情况下呢,我们在代码当中想要定义一个匹配的模式。定义出组合模式啊,所谓的模式序列基本上就满足我们的需求了,但是有些场景呢,可能我们的业务逻辑特别的复杂,那主要就是要划分成很多个不同的阶段,然后每个阶段呢,又有一连串的匹配规则,那这样的复杂需求,我们之前的这个组合模式好像也不能直接把它实现,这个时候又应该怎么办呢?那这个时候就需要去套玩了,就是要把不同的模式再嵌套在一起。直观来看的话,其实就是在之前的模式序列当中,每一个阶段我们用一些连接词来进行个体模式的组合,那就是begin nexts followed by followed by any啊,那这里边每一个方法的参数呢,里边传着的就是当前指定的个体模式的名称,那现在呢,我们可以不传一个个体模式的名称,而是直接传入一个模式序列,直接传入一个pattern啊,那这样的话就相当于每一个阶段这里边我们组合的啊,这个连接词连接的本身就是一个pattern。
01:17
不同的patternon呢,又先后又有顺序,又把它们做了一个近邻关系的指定连接在一起,这就是嵌套起来的模式,就叫做模式组。这个看起来有点复杂,其实之前我们在代码里边,源码里边在看这个调用方式的时候也能够看到啊,像这里的nes方法,其实本身我们在这里能够调用的next方法是有两种形式,一种是直接传入一个string类型,那就是我们说的啊,指定当前个体模式的名称,那另外还有一种呢。我们看到直接可以给一个参数是pattern。把我们定义好的一个模式直接传进来,那当然了,对于这个模式而言,就是一个组合模式啊,就是一个模式序列了,定义好的一组规则可以作为我们当前的一步操作放在这里。
02:07
所以这个一般都是在非常复杂的场景里边才会用到模式啊,那这里我们可以看一个具体的例子啊,比如说这里我们以一个模式序列作为一个初始模式,那就是什么呢?直接pattern.begin这个时候我们定义的里边传入的参数是给了一个pattern,这个pattern怎么定义的呢?啊,那pattern又是点begin,它的初始的这个个体模式叫做start-start啊,然后这就相当于是我们第一个阶段啊,Start阶段的start这一步。然后接下来呢,Followed by start阶段的middle中间这一步。这是我们整个的start起始阶段,然后在它之后呢,又可以严格禁零的定义下一阶段的操作啊,那就是start.next。紧跟着呢,又是一个对应的pattern,又是一个模式序列啊,所以接下来这个pattern指定的就是next这一步里边的start,这是它的D,然后followed by next这一步里面的middle中间的对应的匹配事件。
03:12
而且我们还指定了TIMES2啊,就是当前中间这个阶段重复匹配两次药。然后再之后呢,还可以继续followed by,再定义一个宽松径灵的一组模式,所以后边整个的这一堆作为我们后续的一个阶段跟在后边。同样可以指定量词one more,一次或多次。类似的,如果我们再往后定义的话,也可以去定义一个非确定性的宽松精灵的一个模式序列啊,那就是followed by any里边传入一个pattern啊,那对应的这个pattern就相当于只要是跟在我们前面已经发生的那一组事件啊,匹配上的事件之后就可以,而且呢,呃,之前的事件还可以重复去用,另外呢,它也可以跟对应的量词可以指定一个option,那就是可以匹配一次,也可以不匹配啊。所以我们看这里的每一个阶段,我们定义的这个模式组里面的每一个阶段,都可以把它当成一个个体模式来看,然后后边呢,跟上一个量词,然后再把它们从前到后组合起来,构成一个完整的模式序列啊,那当然了,这样一个模式序列就是一个嵌套的模式序列了,我们把它叫做模式组啊,这一般都是在非常复杂的场景里面才会去用到。
我来说两句