[請益] 記憶圓括號
因為手邊沒有書..所以使用的符號可能不對..請見諒
問題一
假如我有一文件..想要列出所有以數字開頭的列..
並且將所有的數字都整理成三位數..如果是1..就改成001..若是11..改為011
if( m/^(\d+)/ ){
if ( length($1) == 1) { $1 = "00"."$1" ; }
if ( length($1) == 2) { $1 = "0"."$1" ;}
}
可是我這樣寫的話反而一位數和二位數的都會不見..而且會有error訊息
問題二
如果我想將圓括號找到的值交由副常式再處理..
if( m/(符合條件的行列)){
$num = &hex($1);
}
sub hex{
#想要再這裡將$1再做一次記憶圓括號的篩選
if ( m/(再進行一次條件篩選)/ ){
return $1 ;
}
}
但這樣就出現問題..副常式回傳的仍是第一次圓括號找出來的值..
有什麼方式可以使副常式回傳的是第二次篩選出來的值啊??
問題三
我常會將perl當普通指令來改檔案..perl -pi -e 's/.../.../g' 檔案
也常會用到記憶圓括號..
但一直有個問題解決不了..
若我要篩出以數字結尾的行列..並將最末端的數字都改成0..
perl -pi -e 's/(.*)\d/$10/g' 檔案
可是就出問題了..因為系統會判成將找到的行列改為第10個記憶圓括號的值..
而不是我要的..將找到的行列改為第一個記憶圓括號的值再接個0..
如果是寫成程式就好解決了..
print "$1"."0\n";
但因為我是用一行指令..就對它束手無策了..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.169.72
※ 編輯: RueyJing 來自: 123.195.169.72 (12/30 12:18)
→
12/30 13:48, , 1F
12/30 13:48, 1F
→
12/30 13:57, , 2F
12/30 13:57, 2F
因為常常要修改很多檔案..直接用指令快很多..
而且..重點不是一行或二行..
是我想知道$1後接個數字到底要怎樣寫..
因為常會用到..每次都要另想方法避開很麻煩
推
12/30 21:43, , 3F
12/30 21:43, 3F
推
12/30 22:27, , 4F
12/30 22:27, 4F
→
12/30 22:27, , 5F
12/30 22:27, 5F
歹勢..可能我舉的例子不好..我是想知道如果硬要$1後接個數字..
到底應該怎樣寫才對
※ 編輯: RueyJing 來自: 123.195.169.72 (12/30 23:49)
※ 編輯: RueyJing 來自: 123.195.169.72 (12/30 23:54)
推
12/31 00:00, , 6F
12/31 00:00, 6F
→
12/31 00:01, , 7F
12/31 00:01, 7F
→
12/31 00:18, , 8F
12/31 00:18, 8F
→
12/31 00:18, , 9F
12/31 00:18, 9F
推
01/02 22:03, , 10F
01/02 22:03, 10F
推
01/02 22:06, , 11F
01/02 22:06, 11F
Perl 近期熱門文章
PTT數位生活區 即時熱門文章