duc*_*thd 8 regex string perl replace
假设我想在具有以下内容的文件上替换字符串
name
nAmE
naMEbb
NAME
Run Code Online (Sandbox Code Playgroud)
并希望用"dave"替换"name"这个词,但保留原始文本的大小写.例如,我想要的输出是,
dave
dAvE
daVEbb
DAVE
Run Code Online (Sandbox Code Playgroud)
是否有任何单行代码(最好是在Perl中,所以我可以在许多文件中进行就地替换)?
编辑 除非两个字符串具有完全相同的长度,否则问题是不明确的.我们假设它确实如此.
perlFaq上有一些解决方案:http://perldoc.perl.org/perlfaq6.html#How-do-I-substitute-case-insensitively-on-the-LHS-while-preserving-case-on-the-RHS ?
其中一个解决方案允许通过定义子例程(preserve_case)在单行中执行替换:
$string = "this is a TEsT case";
$string =~ s/(test)/preserve_case($1, "success")/egi;
print "$string\n";
Run Code Online (Sandbox Code Playgroud)
这打印:这是一个SUcCESS案例