我试图使用perl正则表达式避免给定字符串中的几个特殊字符.除了美元符号外,所有字符均可正常工作.我试过以下:
my %special_characters; $special_characters{"_"} = "\\_"; $special_characters{"$"} = "\\$"; $special_characters{"{"} = "\\{"; $special_characters{"}"} = "\\}"; $special_characters{"#"} = "\\#"; $special_characters{"%"} = "\\%"; $special_characters{"&"} = "\\&"; my $string = '$foobar'; foreach my $char (keys %special_characters) { $string =~ s/$char/$special_characters{$char}/g; } print $string;
解决方法
尝试这个:
my %special_characters; $special_characters{"_"} = "\\_"; $special_characters{"\\\$"} = "\\\$"; $special_characters{"{"} = "\\{"; $special_characters{"}"} = "\\}"; $special_characters{"#"} = "\\#"; $special_characters{"%"} = "\\%"; $special_characters{"&"} = "\\&";
看起来很奇怪,对吧?您的正则表达式需要如下所示:
s/\$/\$/g
在正则表达式的第一部分,“$”需要转义,因为它是一个特殊的正则表达式字符,表示字符串的结尾.
正则表达式的第二部分被认为是“正常”字符串,其中“$”没有特殊含义.因此,反斜杠是一个真正的反斜杠,而在第一部分,它用于逃避美元符号.
此外,在变量定义中,您需要避免反斜杠和美元符号,因为它们在双引号字符串中都具有特殊含义.