Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 仅限正则表达式搜索和替换匹配项_Regex_Perl - Fatal编程技术网

Regex 仅限正则表达式搜索和替换匹配项

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+的第

在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+的第一个匹配项。有办法做到这一点吗

我期望的结果是:

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。请修一下好吗?我不在电脑旁。你也可以使用“正向查找”吗?