2010-08-25 122 views
1

也許這是一個愚蠢的問題,但:
我運行perl 5.8.8,我需要用「0」替換前面有數字的任何下劃線。替換正則表達式,與捕獲

運行:

$var =~s /(\d)_/$10/g;
顯然不爲$ 10個工作被解釋爲......好$ 10不「$ 1後跟0」

而且,作爲乳寧perl5.8,我不能這樣做

$var=~s/(?<n1>\d)\_/$+{n1}0/g;

有什麼想法嗎?
由於事先

回答

11

就像在各種Unix shell中,可以在括號中爲消除歧義圍住變量名。

$var =~s /(\d)_/${1}0/g; 

或者你可以使用一個向後看,以防止位被比賽的一部分:

$var =~s /(?<=\d)_/0/g; 
+0

這就是它。非常感謝 ! – benzebuth 2010-08-25 13:29:36

0

$var =~s/(\d)_/${1}0/g;

+0

這顯然違背了OP的意圖。 – jpalecek 2010-08-25 13:29:48

+0

對不起,但我說我需要替換下劃線,這意味着我保留數字 – benzebuth 2010-08-25 13:31:01

0

另一種可能性是(不知道是否適用於perl的5.8.8)

s/\d\K_/0/ 
s/(?<=\d)_/0/ 
2

這也將是一個零寬度向後看斷言的好去處:

$var =~ s/(?<=\d)_/0/g; 

它尋找一個數字,但實際上並沒有將數字sl到匹配的文本中。

+0

這也適用。謝謝。 – benzebuth 2010-08-25 13:34:18