2010-06-29 18 views

回答

9
$string =~ s/([ '`])/\\$1/g; 

採用的是character class[ '`]匹配一個空間,'或',並使用括號()記住匹配的字符。然後使用$1在替換中包括記住的字符。

+0

+1:輝煌,正是我所期待的。 – 2010-06-29 12:37:08

4

單獨替換可能比單個複雜替換效率更高(例如,使用固定子串時)。在這種情況下,您可以使代碼更短,像這樣:

my $string;  
for ($string) { 
    s/ /\\ /g; 
    s/'/\\'/g; 
    s/`/\\`/g; 
} 
+0

+1:謝謝你的提法 – 2010-06-29 14:33:51

+1

或者'$ string =〜s /($ _)/ \\ $ 1/g(q//,q /'/,q/\'/);' – Zaid 2010-06-29 15:06:55

2

雖然它無疑更容易閱讀你現在的樣子,你可以同時執行這些替代通過使用一個循環,或者他們在一個組合表情:

# loop 
$string =~ s/$_/\\$_/g foreach (' ', "'", '`'); 

# combined 
$string =~ s/([ '`])/\\$1/g; 

順便說一句,你可以讓你的換人很容易就能避免「傾斜牙籤綜合症」閱讀,因爲各種正則表達式運算符,可以使用多種分隔符:

$string =~ s{ }{\\ }g; 
$string =~ s{'}{\\'}g; 
$string =~ s{`}{\\`}g;