正则表达式搜索和替换匹配

时间:2015-05-24 07:10:03

标签: regex perl

在perl中我有一个长字符串,但这里是重要部分$abc = "...Testvalue1 100...";

有没有办法在Testvalue#之后立即使用Regex搜索数字并将其替换为变量?

这是我到目前为止所做的:

my $abc = "...Testvalue1  100...";
for my $i (1..100) {
    $abc =~ s/Testvalue\d+\W+(\d+)/$i/;
    print $abc . "\n";
}

不幸的是,这会将整个匹配替换为$i,而不仅仅是(\ d +)的第一场比赛。有没有办法做到这一点?

我想要的输出是:

Testvalue1  1
Testvalue1  2
...
Testvalue1  100

2 个答案:

答案 0 :(得分:5)

如果你正在使用Perl 5.10或更新版本:

$abc =~ s/ Testvalue \d+ \s+ \K \d+ /$i/x;

\K的助记符:"保留"左边的所有内容)

如果您不是:

$abc =~ s/ ( Testvalue \d+ \s+ ) \d+ /$1$i/x;

(捕获您不想丢失的数据)。

答案 1 :(得分:1)

在Perl中,您可以使用:

$abc =~ s/Testvalue\d+\W+\K\d+/$i/;

\K重置报告的匹配的起点。任何以前消费的字符都不再包含在最终匹配中。

RegEx Demo