2013-08-07 65 views
1

我試圖用字符串$charlie替換逗號或連字符的所有實例。下面是我最初試圖代碼:Perl:指定替換正則表達式中的出現次數

#!/usr/bin/perl 
use strict; 
use warnings; 

my $charlie = "Charlie, 59, 2009"; 
print "Old Charlie: $charlie\n"; 
$charlie =~ s/[\,-]/ /; 
print "New Charlie: $charlie\n"; 

這將產生輸出:

C:\scripts\perl\sandbox>charlie_substitute.pl 
Old Charlie: Charlie, 59, 2009 
New Charlie: Charlie 59, 2009 

正如你所知道的,只有第一個逗號被替換成空格。爲了解釋多個逗號,我將正則表達式更改爲$charlie =~ s/[\,-]{1,2}/ /;,但我仍然得到相同的輸出。

如何正確指定要在替換中查找的出現次數?

回答

5

使用/g替換「全局」。

$charlie =~ s/[,\-]/ /g; 
        ^
         | 

,不在字符類,或者甚至在一般的正則表達式特殊,所以它不需要逃跑。另一方面,-可以在字符類特殊。如果有什麼需要轉義,這是-。也就是說,如果-是班級的第一個或最後一個字符,則不需要轉義。)