perl中一个正则表达式的疑问

perl中一个正则表达式的疑问

perl中一个正则表达式的疑问
在学正则表达式中遇到一个问题,苦思一下午不得解.
问题是:输入一行字符串,捕捉以a结尾的单词之后的5个字符.
这里单词的概念是字母,阿拉伯数字和下划线.
我是新手,请高手不吝赐教,谢谢
a结尾单词后没5个字符咋么.
a结尾单词后没5个字符咋么处理??比如 an any 等等单词。。
[quote]回复给 胖瓜瓜 : a.
回复给 胖瓜瓜 : a结尾单词后没5个字符咋么....


胖瓜瓜可能没太理解我的问题,an,any都不能算以a结尾的单词啊.
比如:i am wilma yesterday.
那就应该是wilma后面的5个字符,就是" yest",最前面是空格.
不知道你现在理解了吗?
懂了,看错了。那单独的it.
懂了,看错了。那单独的it is a sth. 单独一个a算以a结尾的单词么??
恩,也算.
我用这个模式,结果不成功 
if(/(\w*(a\b))(\w{5})/){
print "$3\n";
}
能帮忙指出哪里错了吗?谢谢.
use strict;--use warni.
use strict;
use warnings;
use bytes;

my $add = "bba a abbbc cccccca bcccc sa sssss";#字符串
my @adds = split /\s/,$add;

while(1)
{
  my $temp = shift @adds;
  if (not defined $temp)
  {
       last;
  }
  if ($temp =~ /.*a$/)
  {
       my @gets = @adds;
       my $line = "";
       while(1)
       {
   my $get = shift @gets;
   $get = " ".$get;
   print "$get\n";
   $line = "$line" . "$get";
   my $blen = bytes::length($line);
   print "length of $line is $blen\n";
   if ($blen < 5)
   {
        next;
   }
   else
   {
        $line =~ /^(.{5}).*/;
        print "the next 5 letter is ###$1###\n";#取出的a后的5个字符。
        last;
   }
   } 
  }
  else
  {
       next;
  } 
}

我是这样实现的,方法比较笨。。。
谢谢你的答复,你的答案确实可行,可是这个是我在学习正则表达式遇到的问题,
问题原本不是想这样解决了,应该有更简洁的办法.
if(/(\w*(a\b))(.{5})/){<.
if(/(\w*(a\b))(.{5})/){
print "$3\n";
}
把你的改成这样就能出结果了,但是只会显示出第一次出现a后面的5个字符,第二,三。。。次就无法出现。
谢谢
和原来我写的比较是把\w变成了.
为什么这样就可以了呢?原来的错在那里呢?
\w不能匹配空格。.