我想使用Perl执行"搜索和替换"在文本文件上,并在替换完成时将每个匹配结果(作为元素)存储到数组中。我试过这个:
my $txt = "
this is a statement //this is comment
//this is a line of comment
more statements //more comments
";
## foreach or while
while ($txt =~ s/(\/\/.*?\n)/foo/gs) {
if(defined $1) {
push (@comments, $1);
}
}
foreach (0..$#comments) {
print "\@comments[$_]= @comments[$_]";
}
====>然而,结果只给了我:
@comments[0]= //more comments
然而,我期望的是:
@comments[0]= //this is comment
@comments[1]= //this is a line of comment
@comments[2]= //more comments
有关此问题的任何提示?谢谢& 3q提前〜
答案 0 :(得分:2)
您可以使用e修饰符(see perlretut)执行替换内的代码:
my $txt = "
this is a statement //this is comment
//this is a line of comment
more statements //more comments
";
my @comments;
$txt =~ s{(//.*\n)} {push(@comments, $1);"foo"}eg;
print $_ foreach (@comments);
其他方式:由于您正在寻找内联注释,您还可以使用循环并且不使用g修饰符逐行工作。
注意:
\n
。//
可以包含在字符串中,因此更安全的方法是使用适当的解析器。