Regex 仅限正则表达式搜索和替换匹配项
在perl中,我有一个长字符串,但这里是重要的部分$abc=…TestValue1100 有没有一种方法可以使用Regex搜索Testvalue后面的数字并用变量替换它 以下是我到目前为止的情况:Regex 仅限正则表达式搜索和替换匹配项,regex,perl,Regex,Perl,在perl中,我有一个长字符串,但这里是重要的部分$abc=…TestValue1100 有没有一种方法可以使用Regex搜索Testvalue后面的数字并用变量替换它 以下是我到目前为止的情况: my $abc = "...Testvalue1 100..."; for my $i (1..100) { $abc =~ s/Testvalue\d+\W+(\d+)/$i/; print $abc . "\n"; } 不幸的是,这会将整个匹配项替换为$i,而不仅仅是\d+的第
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
在Perl中,您可以使用:
$abc =~ s/Testvalue\d+\W+\K\d+/$i/;
\K重置报告的匹配的起点。任何以前使用的字符将不再包含在最终匹配中
在Perl中,您可以使用:
$abc =~ s/Testvalue\d+\W+\K\d+/$i/;
\K重置报告的匹配的起点。任何以前使用的字符将不再包含在最终匹配中
如果您使用的是Perl 5.10或更新版本:
$abc =~ s/ Testvalue \d+ \s+ \K \d+ /$i/x;
记忆法\K:将所有内容保持在左侧
如果你不是:
$abc =~ s/ ( Testvalue \d+ \s+ ) \d+ /$1$i/x;
捕获您不想丢失的数据。如果您使用的是Perl 5.10或更高版本:
$abc =~ s/ Testvalue \d+ \s+ \K \d+ /$i/x;
记忆法\K:将所有内容保持在左侧
如果你不是:
$abc =~ s/ ( Testvalue \d+ \s+ ) \d+ /$1$i/x;
捕获您不想丢失的数据。使用\W+进行匹配有点奇怪whitespace@Borodin诚然,我没有认真考虑正则表达式,我只是复制并粘贴了问题中的内容,并进行了必要的调整以保留左侧部分:现在你已经破坏了它!您想要的是\s+,而不是\W+或\W+@borodin argh。请修一下好吗?我远离一台计算机。你也可以使用正向查找?使用\W+进行匹配有点奇怪whitespace@Borodin诚然,我没有认真考虑正则表达式,我只是复制并粘贴了问题中的内容,并进行了必要的调整以保留左侧部分:现在你已经破坏了它!您想要的是\s+,而不是\W+或\W+@borodin argh。请修一下好吗?我不在电脑旁。你也可以使用“正向查找”吗?