IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    记一件naive的事儿

    ditsing (ditsing@gmail.com)发表于 2012-03-02 19:24:00
    love 0

    最近在写一个关于课程表的程序,跟中文正则表达式打了很多交道。比如一次我需要把“周三”中的那个“三”转成数字。作为一个菜鸟Perler,我在一切可以用到正则表达式的地方放上一个正则表达式。在这儿,我非常naive的认为,中文的“三”也是一个数字,正则里的 “\d” 应该可以匹配,于是我这么写了

    1
    2
    
    $week =~ s/周(\d*)/$1/;
    $week = &find_num( $week);
    

    神奇的是它居然达到了我的目的,最后我确实得到了数字3。 find_num 是个无辜的函数,它负责把“三”转成3。

    于是naive的我naive的认为Perl是如此的强大,居然连中文的数字都能识别。 但是之后我用其他的代码做实验,无论是Perl 5.8, 5.10 还是5.12都匹配不上,于是我再次naive的认为只有最新的Perl 5.14才可以。直到今天我review了我的代码,用5.14测试了

    1
    
    s/周(\d)/$1/
    

    也匹配不上!我这才突然发现了其中的问题,相信我的读者们也都看出来了。

    不过话说回来,Perl的正则还是很强大的,真的是得心应手。所以我决定,就把这个bug永久留在我的代码里了。



沪ICP备19023445号-2号
友情链接