您的位置:首页 > 其它

郁闷,被一个'.'通配符折磨了半天

2009-06-10 16:17 225 查看
今天需要从一个html网页中提取一个信息,写了个perl脚本,在配正则式的时候,用到了'.*'去匹配两个'<'之间的内容,奇怪的是老是出错,百思不得其解,最后终于找到了,原来'.'匹配的是除换行符以外的任何字符,怪不得,于是改为(/s|.)*这样就没问题了。

最后说明一下,要提取的内容是下面样的模板:



perl 代码如下:

#!/usr/bin/perl
$filename="ipv6.html";
$newfile="ipv6.playlist";
open my $NEWFILE, '>>:encoding(unicode)', $newfile or die "couldn't creat $newfile";

my $str;
open my $FILE, '<:encoding(gb2312)', $filename or die "couldn't open $filename";
while (<$FILE>)
{
last  if (m/<div class="opt">/);
$str .= $_;
}

#用(/s|.)*?解释,括号里是为了匹配所有字符,包括换行符,?是为了取消贪婪匹配。
while ( $str =~ m/(<tr class="trbg0">(/s|.)*?<//tr>)/g )
{
&extract($1);
}

sub extract
{
my ($str) = @_;
print $NEWFILE $1."/n" if($str =~ m/<font class="bodytitle" color="#[/w]*">(.*?)<//font>/);
print $NEWFILE $1."/n"  while ($str =~ m/<a href="(mms:.*?)" mce_href="(mms:.*?)">/g);
}
~
~
~



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐