+ -
当前位置:首页 → 问答吧 → 求教一个匹配问题

求教一个匹配问题

时间:2011-03-12

来源:互联网

本帖最后由 will0314 于 2011-03-12 12:12 编辑

我刚开始学习perl,想多了解点实例,所以在看perl cookbook,但是有一节的代码看不明白:
  1. sub dequote;
  2. $poem = dequote <<EVER_ON_AND_ON;
  3.         Now far ahead the Road has gone,
  4.           And I must follow, if I can,
  5.         Pursuing it with eager feet,
  6.           Until it joins some larger way
  7.         Where many paths and errands meet.
  8.           And whither then? I cannot say.
  9.                   --Bilbo
  10. EVER_ON_AND_ON
  11. print "Here's your poem: \n\n$poem\n";
  12. sub dequote {
  13.         local $_ = shift;
  14.        
  15.         my ($white,$leader);
  16.         if (/^\s*(?:([^\w\s]+)(\s*).*\n)(?:\s*\1\2?.*\n)+$/){
  17.                 ($white,$leader) = ($2,quotemeta($1));
  18.         }else {
  19.                 ($white,$leader) = (/^(\s+)/,'');
  20.         }
  21.        
  22.         s/^\s*?$leader(?:$white)?//gm;
  23.         return $_;
  24. }
复制代码
其中[^\w\s]+这个模式匹配我不知道它匹配的是文本哪?
还有个小问题就是当我在($white,$leader) = ($2,quotemeta($1));这句代码后加了print $1这句后(注意没有分号),但是程序没有报错,为什么?
希望各位能指导我一下,谢谢。

作者: will0314   发布时间: 2011-03-12

[^\w\s]+匹配一个或多个非 \w \s 的字符

print $1 也不过是个表达式,为什么要报错

作者: zhlong8   发布时间: 2011-03-12