\ K构造时使用捕获组

时间:2014-07-07 12:16:52

标签: regex perl

我在替换操作中使用\ K结构,但似乎右侧没有捕获组。

代码:

my $string = 'lowerupper';
$string =~ s/lower\K(\w+)/\U$1/;
print $string;

输出:

lowerupper

预期输出:

lowerUPPER

为什么在没有捕获'降低'的情况下实现上述目标是可能的。

谢谢,

克里斯

1 个答案:

答案 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/;

第一个可能会更有效率。