你当前所在位置:首页 > 网站建设 > Perl教程 > 列表

Perl的经典用法:用正则表达式对文件进行操作

作者: 时间:2008-06-03 02:15:45 来自: 【 收藏本文 点击: 评论:

一旦你有个包含了整个串的变量,你可以使用正则表达式,对整个文件进行操作,而不是对文件中的某个块进行操作。有两个有用的正则表达式标记/s和/m。一般,Perl的正则表达式对行进行处理,你可以这样写:

undef$/;

$line=;

if($line=~/(b.*grass)$/){

print"found$1n";

}

如果把我们的文件填入如下内容:browngrass

bluegrass

则输出为:

foundbluegrass

它没有找到“browngrass”,这是因为$仅在串尾寻找其匹配,(或者在串结束前的一行)。如果在包含很多行的串中,用"^"和"$"来匹配,,我们可以使用/m("multiline")选项:

if($line=~/(b.*grass)$/m){}

现在程序会把如下的信息输出:

foundbrowngrass

类似地,句点可以匹配除了换行符之外的所有字符:

while(){

if(/19(.*)$/){

if($1<20){

$year=2000 $1;

}else{

$year=1900 $1;

}

}

}

如果我们从文件中读入“1981”,$_将包含“1981n”。正则表达式中的句点匹配“8”和“1”,而不匹配“n”。这里正需要这样做,因为换行符不是日期的组成部分。

对于一个包含很多行的串,我们也许要提取其中的大的块,这些块可能会跨越行分隔符。在这种情况下,我们可以使用/s选项,并用句点来匹配除了换行符以外的所有字符。

if(m{(.*?)}s){

print"Foundboldtext:$1n";

}

此处,我用了{}来表示正则表达式的起始和结束,而不用斜杠,所以,我就可以告诉Perl我正在匹配,起始字符为"m",结束字符为"s"。你可以把/s和/m选项组合使用:

if(m{^(.*?)}sm){

#...

}

总结

有两种方法打开文件:open()函数的特点是快速简捷,而sysopen()函数功能强大而复杂。通过操作符,可以读入一个记录,$/变量可以让你控制记录是什么。如果你打算把很多行的内容读入到一个串中,不要使用忘记/s和/m这两个正则表达式标记。

责任编辑:adminTags:[keylink]'www.jzcss.com'[/keylink]上一篇:Perl的经典用法:读入段落下一篇:用Perl饼来替换文件中的字符串 相关链接:
  • 无相关信息

用户评论: 查看全部评论

我要发表评论:
用户名:密码:验证码:匿名:
关于我们 - 免责声明 - 版权隐私 - 广告服务 - 联系我们 - 网站地图- 友情链接 - 设为首页- 加入收藏
Copyright© 2008-2009 www.jzcss.com All Rights Reserved
备案中...