看板 Perl 關於我們 聯絡資訊
#!/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
giacch:s/([#;])/'@' . ($1 eq '#' ? $i = 1 : ++ $i)/ge 12/28 14:11
giacch:效果一樣... 12/28 14:12
Austin9:感謝各位大大的指導,謝謝。 12/29 00:03
Austin9:原來還可以這樣用~~ 12/29 19:51