当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 删除C代码注释的脚本
帖子发表于 : 2008-11-21 20:15 
头像

注册: 2006-05-19 21:42
帖子: 184
地址: NIT
送出感谢: 0 次
接收感谢: 0 次
为了便于统计代码行数,写了个去掉代码注释的脚本,perl的。
代码:
#!/bin/perl -w
#Remove comments in c/c++ source file
#Usage: removecomment.pl Infile [Outfile]

use strict;


if(@ARGV < 1)
{
   print STDERR "removecomment.pl Infile [Outfile]\n";
   exit;
}

my ($infile,$outfile) = @ARGV;

open (FI,"$infile") || die "Can not open file:$!";
my @lines = <FI>;
close (FI);

my $contents = join '',@lines;

$contents =~ s/((?<=\n)|^)[ \t]*\/\*.*?\*\/\n?|\/\*.*?\*\/|((?<=\n)|^)[ \t]*\/\/[^\n]*\n|\/\/[^\n]*//gs;

if(!(defined($outfile)))
{
   print $contents;
}
else
{
   open (FO,">$outfile") || die "Can not open file:$!";
   print FO $contents;
   close (FO);
}


顺便问一下,正则表达式怎么表达向前的“懒惰”的匹配,比如“aaaxxxb”中,我想匹配最短的"a.*b",即“axxxb”,"a.*?b"还是会把整个都匹配到,这里a可以理解为一个模式,不然我用"a[^a]*b"就可以了。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 删除C代码注释的脚本
帖子发表于 : 2008-11-29 9:58 
头像

注册: 2007-05-05 23:11
帖子: 694
送出感谢: 2
接收感谢: 0 次
alinmn 写道:
顺便问一下,正则表达式怎么表达向前的“懒惰”的匹配,比如“aaaxxxb”中,我想匹配最短的"a.*b",即“axxxb”,"a.*?b"还是会把整个都匹配到,这里a可以理解为一个模式,不然我用"a[^a]*b"就可以了。

这样行不行:匹配
代码:
a.*(a.*b)
,然后取$1


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 删除C代码注释的脚本
帖子发表于 : 2008-11-29 16:38 
头像

注册: 2006-05-19 21:42
帖子: 184
地址: NIT
送出感谢: 0 次
接收感谢: 0 次
:em01 是可以的 不过要稍微改一下 (a.*)?(a.*b)


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 删除C代码注释的脚本
帖子发表于 : 2008-11-29 19:36 
头像

注册: 2007-05-05 23:11
帖子: 694
送出感谢: 2
接收感谢: 0 次
alinmn 写道:
:em01 是可以的 不过要稍微改一下 (a.*)?(a.*b)

哦对,有道理。
另外第一个括号应该用非提取型的,要不$1的内容不定。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译