免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1604 | 回复: 2

匹配回溯 [复制链接]

论坛徽章:
0
发表于 2012-04-05 11:44 |显示全部楼层

以下是perlretut中讲解(?{code})中的一个例子:
  1.     $x = "aaaa";
  2.     $count = 0;  # initialize 'a' count
  3.     $c = "bob";  # test if $c gets clobbered
  4.     $x =~ /(?{local $c = 0;})         # initialize count
  5.            ( a                        # match 'a'
  6.              (?{local $c = $c + 1;})  # increment count
  7.            )*                         # do this any number of times,
  8.            aa                         # but match 'aa' at the end
  9.            (?{$count = $c;})          # copy local $c var into $count
  10.           /x;
  11.     print "'a' count is $count, \$c variable is '$c'\n";
复制代码
结果为
  1. 'a' count is 2, $c variable is 'bob'
复制代码
当把
  1. (?{local $c = $c + 1;})
复制代码
替换成
  1. (?{$c = $c + 1;});
复制代码
,结果为
  1.   'a' count is 4, $c variable is 'bob'
复制代码
个人对匹配回溯的问题很模糊,对这个例子来说,大概是匹配从'a'开始,*会依次吃进全部的a,然后碰到最后的'aa',再回溯到第二个'a'的位置,同时也回溯到 local $c为2的时候,匹配成功。
请教各位我的理解是否恰当,并想知道要了解下perl正则表达式引擎是如何工作的,去哪看?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2012-04-05 13:44 |显示全部楼层
你说的应该没错....
加入print实验结果为....
    $x =~ /(?{local $c = 0;}) # initialize count
           ( a # match 'a'
             (?{local $c=$c+1; print "a($c),";}) # increment count
           )* # do this any number of times,
           aa # but match 'aa' at the end
           (?{print "aa($c)\n";$count = $c;}) # copy local $c var into $count
          /x;

#1. 有local
$ perl re_code.pl
a(1),a(2),a(3),a(4),aa(2)
'a' count is 2, $c variable is 'bob'

#2. 没有local,  a*由aaaa回溯为aa,但$c还是等于4(只有一个$c)
$ perl re_code.pl
a(1),a(2),a(3),a(4),aa(4)
'a' count is 4, $c variable is 'bob'

论坛徽章:
0
发表于 2012-04-06 08:58 |显示全部楼层
ths,LS
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP