作者CindyLinz (Cindy Wang)
看板Perl
标题Re: [问题] 请问如何在{}里面使用\1?
时间Mon Jun 17 18:13:56 2013
※ 引述《scwg ( )》之铭言:
: ※ 引述《YMLS (流逝於指缝的细沙)》之铭言:
: : 大家好,我有一笔资料如下:
: : C+2AAT-3CGCA
: : 我希望写一行程式,使得数字後面的字母会依照数字的内容被拿走,如下所示:
: : C+T-A
: : 我尝试如下的写法:
: : $line='C+10AAAAAAAAAAT-3CGCA';
: : $line=~s/(\d+)[ACGTNacgtn]{\1}//g;
: : 可是 {\1} 无法发挥我想要得效果,
: : 想请问是否我的语法本身有问题呢?谢谢!
: 根据 http://perl5.git.perl.org/perl.git/blob?f=dquote_static.c
: S_regcurly() 在 parse 的时候 { 之後一定要接数字 -- 不能写 {\1}
: 我会这样写
: $line='C1tt+10AAAAAAAAAAT-3CGCA';
: while ($line =~ /\d+/) {
: $pre = $`;
: ($post = $') =~ s/^[acgtn]{$&}//i;
: $line = $pre . $post;
: }
: print $line . $/;
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 128.36.232.45
: 推 herculus6502:我记得可以用eval的option,有请高人出手… 06/17 16:51
: 推 CindyLinz:翻 perl 的 source 出来解释会不会太恐怖....|| 06/17 18:07
查 perlre 可以看到 (??{ CODE }) 的用法,
被标示为 experimental, 说是以後可能会无预警改掉.
不过它挂在那边不动好像也很久了..
不过用的话仍请自负风险 :p
你想要的功能可以写成这样:
$line=~s/(\d+)(??{"[ACGTNacgtn]{$1}"})//g
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 112.121.80.249
1F:→ scwg:你跑去用 (??{ }) 明明就比翻 source code 恐怖 06/17 20:47
2F:→ CindyLinz:我是乖乖看文件啊.. ._. 06/17 21:25
3F:→ YMLS:这个方法从来没看过@@....真的很谢谢大家热情的回覆! 06/17 21:33