今天看《linux的perl》,看到P120有个简单解说,例子如下:
模式 /a.*ce.*d/ 称为模式 A
用来做测试的字符串是 a xxx ce xxxxxxx ci xxx d 称为字符串B
该字符串当然匹配模式 /a.*ce.*d/
1 内部的处理过程是 先取 A中的 a 去匹配 B第一个字符,ok
2 再取A中的a.*去匹配B,B整个串全部通过匹配
3 ...
4 直到a.*c一直匹配到B的第二个c为止(默认是贪婪模式)
5 取到a.*ce时,发现a xxx ce xxxxxxx ci只能匹配到a.*c,无法匹配后面的e,于是回退,认为a.*ce匹配到a xxx ce为止,不能到第二个c.
对于一些不影响结果的模式匹配,为了加快速度,可以某些地方人为加以限制不用贪婪模式,如上例模式A,在"c"前面可以加一个最小匹配指示"?",变为 /a.*?ce.*d/,这样先前的a.*c匹配到a xxx c就停止了,不会一直到第二个c再回退,速度要快些,对本例来说不影响最终结果。
不过另外有书说,每个具体的perl实现并不完全相同,以上只是一种实现可能。
阅读(2524) | 评论(0) | 转发(0) |