2011年2月27日星期日

Re: [PerlChina] Perl 能否像emacs那样进行更智能一些的文本替换?

On Mon, 2011-02-28 at 09:14 +0800, zwg.zero wrote:
> 我的思路是: 第一步把匹配"LOVE"(全大写的)替换为"TEST";
> 第二步把匹配"L"ove (首字符l大写,后面字符不
> 管大小写)替换为"Test";
> 第三步把匹配 "love"(不管大小写)都替换
> 为"test"。


我也是这个思路,就是不知到怎么用最Perl的方式写出来。我那个写法太罗嗦了。
最好能有一句实现的那种。


> 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 <formalin14@gmail.com>写 道:
> > 上面的方法也不是一无是处,可以先把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
> > <formalin14@gmail.com>写 道:
> >
> > 呵呵,上面这个是错的,一时没考虑清楚,手快给发了。我
> > 再想想。
> >
> > 在 2011年2月25日 下午6:10,Achilles Xu
> > <formalin14@gmail.com>写 道:
> >
> > tr/loveLOVE/testTEST/;
> >
> > 在 2011年2月25日 下午3:22,Kermit
> > <kermit.mei@gmail.com>写 道:
> >
> > 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
> > <kermit.mei@gmail.com> 写道:
> > > 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
> > > 讨论组"论坛。
> > > 要向此网上论坛发帖,请发送
> > 电子邮件至
> > >
> > perlchina@googlegroups.com
> > > 要取消订阅此网上论坛,请发
> > 送电子邮件至 perlchina
> > >
> > +unsubscribe@googlegroups.com
> > > 若有更多问题,请通过
> > >
> > http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论
> > > 坛。
> > >
> > >
> > >
> > >
> > > --
> > > ---------------------------
> > > Achilles Xu
> > >
> > >
> > >
> >
> > > --
> > > 您收到此邮件是因为您订阅了 Google
> > 网上论坛的"PerlChina Mongers 讨论
> > > 组"论坛。
> > > 要向此网上论坛发帖,请发送电子邮件
> > 至 perlchina@googlegroups.com
> > > 要取消订阅此网上论坛,请发送电子邮
> > 件至 perlchina
> > > +unsubscribe@googlegroups.com
> > > 若有更多问题,请通过
> > http://groups.google.com/group/perlchina?hl=zh-CN
> > > 访问此网上论坛。
> >
> >
> > --
> > 您收到此邮件是因为您订阅了 Google 网
> > 上论坛的"PerlChina Mongers 讨论组"论
> > 坛。
> > 要向此网上论坛发帖,请发送电子邮件至
> > perlchina@googlegroups.com
> > 要取消订阅此网上论坛,请发送电子邮件
> > 至 perlchina
> > +unsubscribe@googlegroups.com
> > 若有更多问题,请通过
> > http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
> >
> >
> >
> >
> >
> > --
> > ---------------------------
> > Achilles Xu
> >
> >
> >
> >
> > --
> > ---------------------------
> > Achilles Xu
> >
> >
> >
> >
> > --
> > ---------------------------
> > Achilles Xu
> >
> > --
> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina
> > Mongers 讨论组"论坛。
> > 要向此网上论坛发帖,请发送电子邮件至
> > perlchina@googlegroups.com
> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina
> > +unsubscribe@googlegroups.com
> > 若有更多问题,请通过
> > http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上
> > 论坛。
> >
> >
> > --
> > 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论
> > 组"论坛。
> > 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina
> > +unsubscribe@googlegroups.com
> > 若有更多问题,请通过
> > http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
>
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论
> 组"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 perlchina
> +unsubscribe@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
> 访问此网上论坛。


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

没有评论: