Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29028754
  • 博文数量: 101
  • 博客积分: 4011
  • 博客等级: 上校
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-18 10:37
个人简介

落魄青年,挨踢民工,已经转行

文章分类

全部博文(101)

文章存档

2008年(47)

2007年(54)

分类:

2007-12-07 20:21:45

今天看《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) |
给主人留下些什么吧!~~