說我有在Perl以下:與在Perl一個正則表達式多個取代
my $string;
$string =~ s/ /\\ /g;
$string =~ s/'/\\'/g;
$string =~ s/`/\\`/g;
可以在上述的取代可與單個組合的正則表達式,而不是3層單獨的人進行的?
說我有在Perl以下:與在Perl一個正則表達式多個取代
my $string;
$string =~ s/ /\\ /g;
$string =~ s/'/\\'/g;
$string =~ s/`/\\`/g;
可以在上述的取代可與單個組合的正則表達式,而不是3層單獨的人進行的?
$string =~ s/([ '`])/\\$1/g;
採用的是character class[ '`]
匹配一個空間,'或',並使用括號()
記住匹配的字符。然後使用$1
在替換中包括記住的字符。
單獨替換可能比單個複雜替換效率更高(例如,使用固定子串時)。在這種情況下,您可以使代碼更短,像這樣:
my $string;
for ($string) {
s/ /\\ /g;
s/'/\\'/g;
s/`/\\`/g;
}
+1:謝謝你的提法 – 2010-06-29 14:33:51
或者'$ string =〜s /($ _)/ \\ $ 1/g(q//,q /'/,q/\'/);' – Zaid 2010-06-29 15:06:55
雖然它無疑更容易閱讀你現在的樣子,你可以同時執行這些替代通過使用一個循環,或者他們在一個組合表情:
# loop
$string =~ s/$_/\\$_/g foreach (' ', "'", '`');
# combined
$string =~ s/([ '`])/\\$1/g;
順便說一句,你可以讓你的換人很容易就能避免「傾斜牙籤綜合症」閱讀,因爲各種正則表達式運算符,可以使用多種分隔符:
$string =~ s{ }{\\ }g;
$string =~ s{'}{\\'}g;
$string =~ s{`}{\\`}g;
+1:輝煌,正是我所期待的。 – 2010-06-29 12:37:08