我在替换操作中使用\ K结构,但似乎右侧没有捕获组。
代码:
my $string = 'lowerupper';
$string =~ s/lower\K(\w+)/\U$1/;
print $string;
输出:
lowerupper
预期输出:
lowerUPPER
为什么在没有捕获'降低'的情况下实现上述目标是可能的。
谢谢,
克里斯
答案 0 :(得分:2)
由于您使用的Perl版本早于添加\K
,因此模式不匹配,因此未发生更改。始终使用use strict; use warnings;
!
用5.8,
$ perl -wle'
my $string = "lowerupper";
$string =~ s/lower\K(\w+)/\U$1/;
print $string;
'
Unrecognized escape \K passed through at -e line 3.
lowerupper
使用5.10 +,
$ perl -wle'
my $string = "lowerupper";
$string =~ s/lower\K(\w+)/\U$1/;
print $string;
'
lowerUPPER
您可以使用
获得所需的结果s/(lower)(\w+)/$1\U$2/;
和
s/(?<=lower)(\w+)/\U$1/;
第一个可能会更有效率。