免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xht314
打印 上一主题 下一主题

正则表达式求解!!! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-06-04 17:04 |只看该作者
首先声明一下,关于目录的遍历,我使用的是qiguojie提供的遍历脚本,并进行了一些修改。
以下是脚本:
#!/usr/bin/perl  -w
use strict;
#定义保存搜到目录的数组
my @alldir = ();
#编写一个函数,输入一个路径,搜索这个路径下面的所有文件和目录,并把符合条件的目录保存到alldir数组中
sub pdir
{
   #获取参数
   my ($enter) = @_;
   #打开目录,如果打开失败,退出函数
   opendir (TEMP,$enter)||die return -1;
   #依次取得文件或目录名过滤,不要包含*.*格式的目录或文件,保存合法的到tempdir数组中
   my @tempdir = grep(!/.*\..*/i,readdir TEMP);
   #获得此时tempdir的数组元素个数
   my $arraysize = @tempdir;
   if ($arraysize != 0)
   {
      #循环遍历每个数组元素
      for (my $i=0;$i<$arraysize;$i++)
      {
        #组合成合法的目录元素
        $tempdir[$i] = "$enter/$tempdir[$i]";
  opendir DH, $tempdir[$i] or die "Cannot open $tempdir[$i]: $!";
  foreach my $file (readdir DH) {
   print "one file in $tempdir[$i] is $file\n";
   open FILEHANDLER,"+<$tempdir[$i]/$file";
   my @file_content;
   while(<FILEHANDLER>){
    s/\/\*.*\n//;
    s/\s*\*.*\n//;
    s/(.*?)\/\*.*?\*\//$1/;
    push @file_content,$_;
   }
   close FILEHANDLER;
   open FILEHANDLER,">$tempdir[$i]/$file";
   foreach(@file_content){
    print FILEHANDLER;
   }
   close FILEHANDLER;
  }
  closedir DH;
      }
      #将tempdir压入堆栈数组alldir
      push (@alldir,@tempdir);
      closedir TEMP;
      return 0;
   }
}
print "--------ReadDir----------\n";
#调用函数pdir,获得第一个目录下面的所有符合条件的目录,并保存到alldir中
pdir("D:/Perl/perl-exec/test/");
my $n = @alldir;
#遍历alldir,依次获取alldir中每个元素目录下面的目录,再将结果保存到alldir中
for (my $j=0;$j<$n;$j++)
{
  pdir($alldir[$j]);
  #重置循环种子,使循环可以循环到数组的结尾,遍历所有元素
  $n = @alldir;
}
将红色部分换成你的目录就行

论坛徽章:
0
12 [报告]
发表于 2009-06-04 17:34 |只看该作者

  1. grep -l -r "*" ./ |xargs perl -pi.bk -e "$_ = '' if(m!/\*!..m!\*/!);"
复制代码

论坛徽章:
0
13 [报告]
发表于 2009-06-05 11:44 |只看该作者
非常感谢 shihao138096  朋友占用自己的时间为我写出了这个脚本.  效果很好!  在此表示非常感谢!另外还有其它热心的朋友.   也同样感谢你们的热心帮助!

论坛徽章:
0
14 [报告]
发表于 2009-06-05 13:14 |只看该作者

回复 #13 xht314 的帖子

不用啦,你应该感谢qiguojie,我的目录遍历使用的是他(她)提供的代码。
这里我只做了一下文件操作了,呵呵。

论坛徽章:
0
15 [报告]
发表于 2009-06-05 13:37 |只看该作者
s/\/\*.*\n//;
    s/\s*\*.*\n//;
    s/(.*?)\/\*.*?\*\//$1/;

这三步替换正则有BUG, 能否用一个正则来代替呢?

论坛徽章:
0
16 [报告]
发表于 2009-06-05 14:00 |只看该作者
有什么问题呀,能具体说一下吗?

[ 本帖最后由 shihao138096 于 2009-6-5 14:03 编辑 ]

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
17 [报告]
发表于 2009-06-05 14:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
18 [报告]
发表于 2009-06-05 14:04 |只看该作者
在我的文件中有这样的语句:
import    java.io.*;

执行完脚本后变成   import java.io.  了
我觉得应该是分步替换的问题.  能不能用一个正则表式呢?   例如:  m!/\*!..m!\*/!
我刚才试了不,但不知该怎么用.

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
19 [报告]
发表于 2009-06-05 14:04 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
20 [报告]
发表于 2009-06-05 14:30 |只看该作者

回复 #18 xht314 的帖子

不好意思,你把前两句改成以下两句,应该就没问题了:
s/^\/\*.*\n//;
s/^\s*\*.*\n//;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP