免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1680 | 回复: 3
打印 上一主题 下一主题

模式匹配-动态表达式的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-31 20:04 |只看该作者 |倒序浏览
示例一:
$_ = 'a2b';
/a(??{if($' eq '2b') {'2'}})/;

示例二:
$_ = 'a2b';
/a(??{if($' =~ m#2b#) {'2'}})/;

其中示例一,匹配成功;示例二,匹配不成功。
我想问的是,这意味着动态表达式的条件中,不能有模式匹配么? 谢谢!

[ 本帖最后由 HorseJia 于 2008-4-2 12:51 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-03-31 22:10 |只看该作者
原帖由 HorseJia 于 2008-3-31 20:04 发表
示例一:
$_ = 'a2b';
/a(??{if($' eq '2b') {'2'}}/;

示例二:
$_ = 'a2b';
/a(??{if($' =~ m#2b#) {'2'}}/;

其中示例一,匹配成功;示例二,匹配不成功。
我想问的是,这意味着动态表达式的条件中 ...

很神奇
难道是个bug??
debug了一下

  1. #!/usr/bin/perl
  2. use re qw ( debug );
  3. use strict;
  4. use warnings;
  5. $_ = "a2b";
  6. #print "Matched at $& \n" if /a(?{ print "Goes here \n" if $' eq  "2b" ;})/;
  7. print "Matched $& \n" if m@a(?(?{ $' =~ /2b/ })2)@;
复制代码
EXECUTING...

Guessing start of match, REx `a(?(?{ $' =~ /2b/ })2)' against `a2b'...
Found anchored substr `a' at offset 0...
Guessed: match at offset 0
Matching REx `a(?(?{ $' =~ /2b/ })2)' against `a2b'
  Setting an EVAL scope, savestack=12
   0 <> <a2b>             |  1:  EXACT <a>
   1 <a> <2b>             |  3:  LOGICAL[1]
   1 <a> <2b>             |  4:  EVAL
  re_eval 0x8080318
Guessing start of match, REx `2b' against `2b'...
Found anchored substr `2b' at offset 0...
Guessed: match at offset 0
Matching REx `2b' against `2b'
  Setting an EVAL scope, savestack=12
   0 <> <2b>              |  1:  EXACT <2b>
   2 <2b> <>              |  3:  END
Match successful!
-89031 <> <2b>              |15280:IFTHEN
-89031 <> <2b>              |15282:EXACT <2>
-89030 <> <b>              |15287:END
Match possible, but length=-89030 is smaller than requested=0, failing!
Match failed
Freeing REx: `"a(?(?{ $' =~ /2b/ })2)"'
Freeing REx: `"2b"'

ms是match的,后来堆栈返回的时候出错了

论坛徽章:
0
3 [报告]
发表于 2008-04-02 04:06 |只看该作者
因为楼主不够细心:
$_ = 'a2b';
/a(??{if($' eq '2b') {'2'}}/;

论坛徽章:
0
4 [报告]
发表于 2008-04-02 12:52 |只看该作者

回复 #3 __lxmxn__ 的帖子

那是我的笔误,呵呵,已更新在原帖。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP