00:00
我们现在已经了解了个体模式里边相关的一些东西啊,我们知道了量词,也知道了个体模式里边的条件,呃,接下来我们就来说一说模式序列,也就是前面我们所说的组合模式,很多个个体模式连在一起,变成了一个组合模式,组合模式里边又有什么需要注意的点呢?哎,这里边首先我们看一下这个图啊,这就是组合模式里边最重要的一个概念,就是所谓的不同的净灵模式,什么叫不同的净灵模式呢?大家看一下,这就涉及到我们定义模式的时候,不是相当于是一个规则吗?事件复杂事件序列选取的一个规则,那既然是复杂事件前后要发生不同的事件,它们之间的联系,这就是不同的模式了,对吧?比方说大家看前面这个定义的是前边一个圆圈,后边一个正方形,而且我要求它是必须紧跟着发生,对吧?诶,这里边如果要是必须紧跟着发生的话,这里边我们就有一个要求可以认为它。
01:00
是严格禁邻模式,意思就是一个后面必须紧跟着下一个对吧?呃,中间不能有,呃,不能有第三者插足啊啊,那后边还有与之对应的,另外有一个情形就是啊,就像我们这个排队一样,只要是前边是五角星,后边有一个方框就可以,你中间可以排着别人,只要他在后边,这就符合我们的标准啊,这种在有一些场景下也是比较常见的应用,对吧,就是不要求他必须要严格跟着下一个发生,中间可以插着别的啊,那这种方式我们就叫做宽松净灵模式,或者有时候叫做非严格竞邻模式啊,这个就看这个不同的定义啊,有时候都会讲,那接下来我们再来给大家详细的说一说,到底是怎么定义的啊,那是首先是严格禁邻,严格竞邻所说的就是中间没有不匹配的事件,对吧?定义的时候用什么方法呢?api.next就是之前大家已经用过的字面含义下。
02:00
哪一个啊,既然是下一个,那当然中间不能有别人了啊,那这里边给大家举一个例子,就是如果说我们的这个模式是指定了A,就是符合A条件的这样的一个个体模式,然后后边在next b的话,如果是这样的一个要求的话,我们这里边来了一个事件序列啊,这个A和B1 B2这个就表示符合A条件的这个事件,对吧?啊B1,这就是符合B条件的一个事件,第一个事件,第二个事件,那acbb它能够匹配出来我们想要的这个模式吗?匹配不到,因为中间隔了C了,对吧?我要求就是A后面必须紧跟着B才行,所以这个就没有匹配啊,那与之对应的如果是宽松镜灵模式的话,中间就可以出现跟我们定义的这个个体模式不相关的事件,对吧,那中间那些我直接略过就可以,只要后边跟着就好,那这种定义就叫做follow the b调用的方法API。
03:00
指follow by,这个followed by的含义就是说,哎,就是只要跟在后边就行嘛,呃,不管中间有没有人对吧,我只要是在他后边就就可以了,只要follow跟上就行了,那所以这里边如果要是a followed by b的话,大家看ACB1B2有没有匹配呢?诶有可以匹配出来ABBE1这样一个匹配对吧,中间可以隔着一个C,呃,然后这个ABBE1可以匹配上,然后另外还要给大家说一个另外一种模式叫做非确定性宽松竞灵,它对于这个竞灵模式的要求就会更加的放宽,含义是什么呢?啊,就是之前已经匹配过的事件还可以重复利用啊,就是相当于之前这个比方说a follow by b对吧?诶你之前这里边A和B1匹配上之后,A就不能用了,你在非宽非确定性宽松径灵模式下,还可以继续去做一个这个,呃,继续的匹配,那这种方式就叫做followed by any。
04:00
啊,大家看到这个follow by any字面也非常好理解,就是说只要在后边跟着就行对吧?啊,就是不管他这个any嘛,什么样的东西跟在后边都可以,所以大家可以看一下这个如果要是a followed by any b的话,后边如果我们这个ACB1 B2,那它的匹配是什么呢?就是AB1AB2都可以直接匹配上啊,这种方式就相当于放的更开了,对吧,那就直接就是匹配上的这种情形更多了嘛,这就是三种不同的这种竞邻模式,大家从从这个结果上也可以看出它的严格和宽松的程度,严格竞灵的话没有匹配,如果宽松定灵匹配到一个非确定性宽松定灵进一步放宽条件就可以匹配上两个了啊,这就是关于这个不同的模式序列的定义啊,不同的经营模式。接下来我们看一下模式序列里边还有几个要点大家需要注意,首先就是哎,除了以上我们常见的这些啊,Next followed by followed by any这些连接不同的个体模式啊,构成这个模式序列之外,还可以定义什么呢?啊,这种连接词大家可以认为还可以定义,就是不希望出现什么样的情况。
05:17
就是用一个否定的连接词来做一个连接,呃,比方说什么呢?Not next,比方说not followed by,哎,那not next指的就是什么?就是A后面not next b就是下一个千万不要是B对吧?就是谁都行,千万不要是B,这样的话才叫做匹配,假如后面来了B的话,那就不匹配对吧?哎,整个就就就匹配不上了啊,这是一种情形。另外还有一个是not followed by,也就是说a not follow by b指的就是A后边不要有B来对吧?哎,后边就是你可以隔着几个,但是反正就是后边不要有B来,但大家想想这种场景的话,他是不是就说不准啊,那因为他说是不要有必来,也就是说那那我等到什么时候为止呢?那这个我一直等着你,你说这个什么叫叫匹配的上呢?匹配的上就是呃,后边我能确定他肯定不会有避雷了,对吧。
06:13
可是我这里面一直等着它是不是永远,因为中间可以隔着别的数嘛,我一直等下去,永远都有可能下一个就是B了,对吧,就有永远有可能它匹配不上,那这怎么办呢?所以大家注意啊,Not followed by一般情况不是用来表示啊,就是只是单纯的表示B不在A后边,一般它用来表示什么呢?就是后边还要再跟上一个其他的事件,也就是表示B不在,比方说后边再来一个,呃,下一个是啊,Follow by c对吧?就表示什么呢?是B不在A和C之间啊,这样的话你就能检测就有一个结束标志了,对吧?你后面如果出现C的话,那就说明这个啊,满足我们这个条件,然后中间没有B啊,就是满足这个条件,如果没有C的话,那相当于它就不匹配了啊,这个就比较好判断了,就不用永远等下去了,所以这个note follow by一般是用来表示不想让某个事件在两个事件之间发生这种场景。
07:14
啊,所以下面大家看这个注意事项啊,除了前面我们说的这个所有模式序列都必须以这个开始,后面还有一条什么呢?就是不能以note follow by结束,对吧,就是一定它是处在两个个体模式之间发生的,你不要说note follow by就结束了,那那我等到什么时候啊,一直在等,那另外还有一个就是note类型的这样的一个个体模式啊,定义出来的这个个体模式不能被optional修饰。Option大家还记的什么含义,可选啊,那可选你前面说就是后面不要紧跟着b not,呃,Not next b对吧?呃,那那这里边你又说optional可选,意思就是后面不要紧跟着B,呃,然后呢,不要紧跟着,就是如果不出现也也行对吧?呃,意思就是说紧跟着也行,那你到底是要还是不要呢?就没有这种定义了,对吧,你这种模棱两可,这当然就没有这种情况了,所以不能用闹来not类型的模式,不能用optional来修饰。另外呢,还有一个特殊的时间约束的定义,就是我们前面比较熟悉的啊,可以定义一个within in对吧?啊within in它所指的是什么呢?是当前我们整个模式序列检测,就是我们这一组复杂事件,它需要在多长时间内匹配有效。呃,所以之前像我们定义这个两秒之内连续两次登录失败,诶我们就直接在后面跟一个微对吧,诶直接就是在后面。
08:45
按定义这个时间就可以了啊,所以这里边它主要就是用来考察我们的这个时间约束时间限制的,大家可以简单的把这个理解成什么呢?就是类似于定义了一个定时器啊,就是相当于是什么它的,那它的这个触发时间是什么呢?呃,就是定义的基准时间是什么呢?触发时间大家知道,比方说这里边十秒钟,那就是十秒钟之后呢,那到底是谁十秒钟之后呢?什么事件之后十秒钟呢?诶,那就是当然是当前模式序列的一定那个开始的那个事件到来的时候,对吧?那就是当前那个开始事件来了之后,现在就开始相当于有一个定时器了,十秒钟之后去出发判断它,它是否在这个时间内啊,那所以大家可以近似的认为这类似于一个窗口操作,但是跟之前我们定义的窗口还不一样,对吧?啊,它不会说是像滚动窗口,就是说我前一个定义了一个这个,呃,找到了一个begin的对应的那个事件。
09:45
然后呃,十秒钟之后去检测一下,看是不是符合要求,然后接下来呢,就就开始下一个十秒的检测,不是这样的啊,这就相当于滚动窗口了,对吧?哎,那下一个十秒的检测是怎么样去出发的呢?他要等到下一个比定的那个视线匹配上才去,哎,就相当于有下一个十秒的定时器,对吧,才去等下一个十秒的时间间隔啊,所以大家看这个就相当于把我们之前process function里边定义,呃,定义注册定时器,然后去等待它的这个触发做处理,这个流程就相当于底层帮我们都实现了,这就是这个cep的一个底层的原理啊。
我来说两句