使用perl的正则表达式对文件中的特定类型超链接里面的换行去掉,使其在一行
2012-11-22 10:14
477 查看
感谢大学里面的王仲老师,他给我的影响很大,他教给我很重要的一点是要学习使用perl,当时我只是借了一本图书学习了一下,不曾运行过一句代码。
现今遇到难题了,才想起perl的强大来。如果说就我熟悉的语言来做比较,js擅长正则,java擅长文件,那么perl就是两者兼之。
以前没用perl,我考虑过将js与java通过web连接起来,以取长补短,但感觉还是太麻烦,并且那对于单文件还可以应付,如果要遍历整个目录,肯定够呛,所以我将目光投向了perl,以前只是纸上谈兵,现在要开始实战了。
问题:将下面这段代码
换成下面的形式
即只对形如<a href="<@ww.url action超链接进行处理,使整个标签放到一行上(目的是为了让双引号的内容不至于错行,使js脚本可以正常运行),页面中的其它部分保持原样。看起来简单,实际上我所了解的任何编辑器都不能完成这项工作
下面说一下perl中的解决办法:
必应了一天,终于找到对一个目录进行递归处理的方法(批量处理)
可以将上面的内容保存到一个文件replace_ww.pl中,然后在perl环境下执行即可,工具padre不错,也是perl官网推荐的IDE,虽然没有eclipse那样强大
现今遇到难题了,才想起perl的强大来。如果说就我熟悉的语言来做比较,js擅长正则,java擅长文件,那么perl就是两者兼之。
以前没用perl,我考虑过将js与java通过web连接起来,以取长补短,但感觉还是太麻烦,并且那对于单文件还可以应付,如果要遍历整个目录,肯定够呛,所以我将目光投向了perl,以前只是纸上谈兵,现在要开始实战了。
问题:将下面这段代码
<td background='${imagePath}tabbg.gif' class='Tab_ContentTd'> <a href="<@ww.url action="listChildBizModules">s23234 <@ww.param name="parentBizModuleId" value="bizModule.id"/> </@ww.url>"> ${action.getText("child.bizmodule.list")} </a>sldfjslkdfjlskfl <a href="<@ww.url action="listChildBizModules">s <@ww.param name="parentBizModuleId" value="bizModule.id"/> </@ww.url>">${action.getText("child.bizmodule.list")} </a> </td> <td><img src="${imagePath}tabright.gif" class="Tab_HotRight"></td>
换成下面的形式
<td><img src='${imagePath}tab_left.gif' class="Tab_HotLeft"></td> <td background='${imagePath}tabbg.gif' class='Tab_ContentTd'> <a href="<@ww.url action="listChildBizModules">s23234<@ww.param name="parentBizModuleId" value="bizModule.id"/></@ww.url>">${action.getText("child.bizmodule.list")}</a>sldfjslkdfjlskfl <a href="<@ww.url action="listChildBizModules">s<@ww.param name="parentBizModuleId" value="bizModule.id"/></@ww.url>">${action.getText("child.bizmodule.list")}</a> </td> <td><img src="${imagePath}tabright.gif" class="Tab_HotRight"></td>
即只对形如<a href="<@ww.url action超链接进行处理,使整个标签放到一行上(目的是为了让双引号的内容不至于错行,使js脚本可以正常运行),页面中的其它部分保持原样。看起来简单,实际上我所了解的任何编辑器都不能完成这项工作
下面说一下perl中的解决办法:
my $addr = 'D:\perltest\extcomponent\bizmoduleconfig\bizModule_header.ftl'; # my $addr = "c:\22.log"; if (open(FILE, $addr)) { # here's what to do if the file opened successfully print "open file \"$addr\" successful!\n"; } else{ print "open file \"$addr\" unsuccessful!\n"; } my $record; { local $/ = undef;// 一次性读取整个文件到变量中,参考http://perl.plover.com/local.html $record=<FILE>; } close(FILE); #找到超链接并且是使用双w的标签,使用e开关对结果进行处理再行替换 $record =~ s/<a href=\"<\@ww.*?<\/a>/subBlank($&)/esg; open OUTFILE, ">", 'a.ftl' or die "Could not open file. $!"; print OUTFILE ($record); close OUTFILE; sub subBlank{ my $str = "$_[0]"; $str =~ s/\s*\R\s*//g;#去掉换行及换行前后的空格 return $str ; }
必应了一天,终于找到对一个目录进行递归处理的方法(批量处理)
use File::Find; my $dir = 'D:/perltest/new/extcomponent';# whatever you want the starting directory to be find(\&do_something_with_file, $dir); sub do_something_with_file { unless(-d){ # print $_ . "\n"; replaceww($_); } # print "\t"; #..... } sub replaceww{ if (open(FILE, $_)) { # here's what to do if the file opened successfully # print "open file \"$_\" successful!\n"; } else{ print "open file \"$_\" unsuccessful!\n"; return; } my $record; { local $/ = undef; $record=<FILE>; } close(FILE); #找到超链接并且是使用双w的标签,使用e开关对结果进行处理再行替换 my $hasww = $record =~ /<a href=\"<\@ww.*?<\/a>/sg; if($hasww) { print $hasww . " " . $_ . "\n"; $record =~ s/<a href=\"<\@ww.*?<\/a>/subBlank($&)/esg; # 将处理后的结果写回文件 open OUTFILE, ">", $_ or die "Could not open file. $!"; print OUTFILE ($record); close OUTFILE; } sub subBlank{ my $str = "$_[0]"; $str =~ s/\s*\R\s*//g;#去掉换行及换行前后的空格 return $str ; } }
可以将上面的内容保存到一个文件replace_ww.pl中,然后在perl环境下执行即可,工具padre不错,也是perl官网推荐的IDE,虽然没有eclipse那样强大
相关文章推荐
- 使用perl的正则表达式对文件中的特定类型超链接里面的换行去掉,使其在一行
- 使用Java正则表达式去掉Double类型的数据后面多余的0
- 使用Java正则表达式去掉Double类型的数据后面多余的0
- 使用正则表达式去掉回车、换行、空白符号
- 正则表达式获取一个文本域中每一行的值并且去掉前后空格
- C#使用正则表达式读取log4net日志文件
- 使用正则表达式找出不包含特定字符串的条目
- 使用正则表达式找出不包含特定字符串的条目
- 通过Java正则表达式去掉SQL代码中回车换行和多余空格
- 在c++Builder中使用boost正则表达式实现的查找double和int类型的字符串,并实现StringToInteger和StringToDouble函数
- 在perl正则表达式中使用变量
- Powershell学习笔记--使用正则表达式查找文件
- 使用JavaScript正则表达式如何去掉双引号
- IOS使用正则表达式去掉html中的标签元素,获得纯文本
- UE(ultraedit)技巧【很多数据时设置换行】【列模式的使用】【选出具有特定内容的行】【复制bin文件视图】【bin文件添加或者删除字节】
- 去掉代码中的空行和注释行,可以使用以下正则表达式替换。
- Java使用正则表达式对日期类型进行格式转换
- C# 使用正则表达式去掉字符串中的数字
- 学习 Linux,101: 使用正则表达式搜索文本文件
- 使用正则表达式找出不包含特定字符串的条目