作者cutecpu (可爱中央处理器)
看板Perl
标题Re: [问题] 同一行上字串的处理
时间Sun Dec 28 12:53:41 2008
#!/usr/bin/perl
$_='aa#apple;inquire;keep/bb#about;abc;grammar;new;englsih';
s/(#|;)/'@'.($i=($1 eq '#' ? 1:$i+1))/ge;
print;
※ 引述《Austin9 (奥斯丁)》之铭言:
: 不好意思,想请问一下同一行字串的处理
: 现在有一组字串如下
: $test=aa#apple;inquire;keep/bb#about;abc;grammar;new;englsih;
: 想将它改成为
: aa@1apple@2inquire@3keep/bb@1about@2abc@3grammar@4new@5englsih
: 我的写法为先将#号都改成@1,但是";"这部份就有困难了,我用reg方
: 式去判断结果是一直累加下去,变成如下
: aa@1apple@2inquire@3keep/bb@1about@4abc@5grammar@6new@7englsih
: $ECounter = 2;
: if (/#/) {
: s/#/@.1/ge;
: if (/\@1/) {
: $ECounter = 2;
: s/;/@.$ECounter++/ge;
: print ;
: }
: }
: 这样看起来,好像它会并不会去判断後面的东西,而是直接replace,有方法
: 可以利用reg且还可以在同一行进行判断吗?谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.160.60.234
1F:→ giacch:s/([#;])/'@' . ($1 eq '#' ? $i = 1 : ++ $i)/ge 12/28 14:11
2F:→ giacch:效果一样... 12/28 14:12
3F:推 Austin9:感谢各位大大的指导,谢谢。 12/29 00:03
4F:推 Austin9:原来还可以这样用~~ 12/29 19:51