我有一个文本文件,包括以下几行:
/* MY TXT File LINE */
/* MY TXT File LINE MORE */
constant private FileName = <A "C:\\TMP\\ALARM.TXT">
constant ConfigAlarms = <U1 0> /* Comment Here*/
我不知道如何划分注释行(/* something */
):
LINE1:
/* MY TXT File */
LINE2 :(实际上,我认为该行不是真正的评论行。)
constant ConfigAlarms = <U1 0> /* Comment Here*/
我的代码如下。
if ($val =~ /\/\*/){
print "<!-- $line -->";
print "\n";
}
LINE1和LINE2将被视为评论。
我用Google搜索并找到了以下信息。
^f # f at the beginning of a line
^ftp # ftp at the beginning of a line
e$ # e at the end of a line
tle$ # tle at the end of a line
但我不知道如何将/*
与^
和$
字符组合以改进我的代码以解析以/*
开头并以{结尾的行{1}}
谢谢。
答案 0 :(得分:4)
m{^/\*.*\*/$}
会将/*
作为前两个字符,*/
作为最后两个字符的行匹配。
答案 1 :(得分:2)
见FAQ。不要忽略匹配给定模式的文本,而是捕获它。
或者,你可以给String::Comments::Extract一个镜头。见[String::Comments::Extract::C->collect( <source> )
](http://search.cpan.org/perldoc/String::Comments::Extract#String::Comments::Extract::C-%3Ecollect(%3Csource%3E)。
答案 2 :(得分:2)
有一个令人难以置信的CPAN模块可以帮助解决这个问题Regexp::Common::comment。使用它非常容易:
use Regexp::Common qw /comment/;
while (<>) {
/$RE{comment}{C}/ and print "Contains a C comment\n";
/$RE{comment}{C++}/ and print "Contains a C++ comment\n";
/$RE{comment}{PHP}/ and print "Contains a PHP comment\n";
/$RE{comment}{Java}/ and print "Contains a Java comment\n";
/$RE{comment}{Perl}/ and print "Contains a Perl comment\n";
/$RE{comment}{awk}/ and print "Contains an awk comment\n";
/$RE{comment}{HTML}/ and print "Contains an HTML comment\n";
}
use Regexp::Common qw /comment RE_comment_HTML/;
while (<>) {
$_ =~ RE_comment_HTML() and print "Contains an HTML comment\n";
}
您应该能够轻松扩展此内容以涵盖多行注释。