我的思路是: 第一步把匹配“LOVE”(全大写的)替换为“TEST”;
第二步把匹配“L"ove (首字符l大写,后面字符不管大小写)替换为“Test”;
第三步把匹配 "love"(不管大小写)都替换为“test”。

On 02/25/2011 10:23 PM, zesheng wang wrote:
> $loveStr =~ s/(l)ove/@{[$1 eq 'L'?'T':'t']}est/gi;
> 不知道你是不是要这个效果?
>
> 在 2011年2月25日 下午6:17,Achilles Xu <[email protected]
> <mailto:[email protected]>>写 道:
>
>     上面的方法也不是一无是处,可以先把foreach里的代码简化了。至于怎么
>     一句实现,我再想想。
>     $loveStr = q/love LOVE Love lOVe LOve loVE/;
>     print $loveStr."\n";
>     foreach my $en ($loveStr =~ m/love/ig) {
>     $en2 = $en;
>     $en2 =~ tr/loveLOVE/testTEST/;
>     $loveStr =~ s/$en/$en2/g;
>     }
>     print $loveStr."\n";
>
>     在 2011年2月25日 下午6:11,Achilles Xu <[email protected]
>     <mailto:[email protected]>>写 道:
>
>         呵呵,上面这个是错的,一时没考虑清楚,手快给发了。我再想想。
>
>         在 2011年2月25日 下午6:10,Achilles Xu <[email protected]
>         <mailto:[email protected]>>写 道:
>
>             tr/loveLOVE/testTEST/;
>
>             在 2011年2月25日 下午3:22,Kermit <[email protected]
>             <mailto:[email protected]>>写 道:
>
>                 On Fri, 2011-02-25 at 15:11 +0800, Achilles Xu wrote:
>                 > s/love/test/i;
>                 >
>                 > 最后的i表示不区分大小写
>
>                 那样会把所有的大小写无关的love都换成小写的test, 我其
>                 实想要的是这样的效
>                 果:
>
>                 $loveStr = q/love LOVE Love lOVe LOve loVE/;
>                 print $loveStr."\n";
>                 foreach my $en ($loveStr =~ m/love/ig) {
>                 if($en eq uc($en)) {
>                 $loveStr =~ s/$en/TEST/g;
>                 }elsif(substr($en,0,1) eq uc(substr($en,0,1))) {
>                 $loveStr =~ s/$en/Test/g;
>                 }else {
>                 $loveStr =~ s/$en/test/g;
>                 }
>                 }
>                 print $loveStr."\n";
>
>                 运行输出:
>                 love LOVE Love lOVe LOve loVE
>                 test TEST Test test Test test
>
>                 只不过上面写法太罗嗦,不知有没有更优雅,更Perl的写法?
>
>                 Thanks
>                 B.R
>                 Kermit
>
>                 >
>                 > 在 2011年2月25日 下午2:17,Kermit
>                 <[email protected] <mailto:[email protected]>>
>                 写道:
>                 > Dear all,
>                 >
>                 > $loveStr = q/love Love LOVE lOVe LOVe/;
>                 >
>                 > 如果在emacs中编辑C/C++代码时,用"M-x replace-string love
>                 > test",
>                 > 就会从
>                 > q/love Love LOVE lOVe LOVe/;
>                 > 变为:
>                 > q/test Test TEST test Test/;
>                 >
>                 > 就是说能够识别开头的大写和全大写。这在Perl中有没有什
>                 么方式快捷
>                 > 实现?
>                 >
>                 > Thanks
>                 > B.R
>                 > Kermit
>                 >
>                 >
>                 >
>                 >
>                 >
>                 > --
>                 > 您收到此邮件是因为您订阅了 Google 网上论坛的
>                 “PerlChina Mongers
>                 > 讨论组”论坛。
>                 > 要向此网上论坛发帖,请发送电子邮件至
>                 > [email protected]
>                 <mailto:[email protected]>。
>                 > 要取消订阅此网上论坛,请发送电子邮件至 perlchina
>                 > [email protected]
>                 <mailto:[email protected]>。
>                 > 若有更多问题,请通过
>                 > http://groups.google.com/group/perlchina?hl=zh-CN 访
>                 问此网上论
>                 > 坛。
>                 >
>                 >
>                 >
>                 >
>                 > --
>                 > ---------------------------
>                 > Achilles Xu
>                 >
>                 >
>                 >
>                 > --
>                 > 您收到此邮件是因为您订阅了 Google 网上论坛的
>                 “PerlChina Mongers 讨论
>                 > 组”论坛。
>                 > 要向此网上论坛发帖,请发送电子邮件至
>                 [email protected]
>                 <mailto:[email protected]>。
>                 > 要取消订阅此网上论坛,请发送电子邮件至 perlchina
>                 > [email protected]
>                 <mailto:[email protected]>。
>                 > 若有更多问题,请通过
>                 http://groups.google.com/group/perlchina?hl=zh-CN
>                 > 访问此网上论坛。
>
>
>                 --
>                 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina
>                 Mongers 讨论组”论坛。
>                 要向此网上论坛发帖,请发送电子邮件至
>                 [email protected]
>                 <mailto:[email protected]>。
>                 要取消订阅此网上论坛,请发送电子邮件至
>                 [email protected]
>                 <mailto:perlchina%[email protected]>。
>                 若有更多问题,请通过
>                 http://groups.google.com/group/perlchina?hl=zh-CN 访问
>                 此网上论坛。
>
>
>
>
>             -- 
>             ---------------------------
>             Achilles Xu
>
>
>
>
>         -- 
>         ---------------------------
>         Achilles Xu
>
>
>
>
>     -- 
>     ---------------------------
>     Achilles Xu
>
>     -- 
>     您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨
>     论组”论坛。
>     要向此网上论坛发帖,请发送电子邮件至 [email protected]
>     <mailto:[email protected]>。
>     要取消订阅此网上论坛,请发送电子邮件至
>     [email protected]
>     <mailto:perlchina%[email protected]>。
>     若有更多问题,请通过
>     http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
>
> -- 
> 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”
> 论坛。
> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。
> 要取消订阅此网上论坛,请发送电子邮件至
> [email protected]。
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
> 访问此网上论坛。

-- 
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 [email protected]。
要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

回复