如何打印替换操作中替换的内容?

时间:2010-12-27 13:51:14

标签: regex perl replace

我知道这是一个非常简单的问题,但我真的没有谷歌搜索它。 =(

我有这样的事情:

$a =~ s/(\w*)/--word was here--/g;

我想在日志文件中添加更换的单词。

aa 123 bb 234 cc--word was here-- 123 --word was here-- 234 --word was here--

这没关系,但我想记住aabbcc并写入日志文件。我该怎么办?

实际上我有一个链接删除脚本,但我需要记住删除了哪些链接。我试图为你简化我的任务但是让它更难理解 - 抱歉。

3 个答案:

答案 0 :(得分:4)

您可以使用e修饰符来评估右侧作为表达式:

   $a =~ s/(\w*)/log_it($1), ""/ge;

答案 1 :(得分:0)

以下将所有捕获的单词存储到数组中:

use strict;
use warnings;
use Data::Dumper;

my $s = 'cat dog';
my @words;
while ($s =~ s/(\w+)//) {
    push @words, $1;
}
print Dumper(\@words);

__END__
$VAR1 = [
          'cat',
          'dog'
        ];

更新:现在您已添加输入和输出数据,看起来您想要排除数字。在这种情况下,您可以使用[a-zA-Z]代替[\w]

答案 2 :(得分:0)

您可以循环而不是/g;

my $string = "xxx ; yyy ; zzz";
my @replaced;
while ($string =~ s/(\w+)//) { push @replaced, $1 };
print join(",",@replaced);
# OUTPUT: xxx,yyy,zzz

请注意\w是WORD字符,而不是字母字符,因此它也会匹配数字0-9。 如果您只想匹配字母,请使用[[:alpha:]]