Tôi đang cố gắng để thoát khỏi một số ký tự đặc biệt trong một chuỗi đã cho bằng cách sử dụng regex perl. Nó hoạt động tốt cho tất cả các ký tự ngoại trừ ký hiệu đô la. Tôi thử như sau:
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;
Cách tiếp cận tốt hơn: sử dụng 'quotemeta()' hoặc 's/\ Q $ char \ E/...' Bạn nên nhớ làm điều này cho mỗi biến $, vì regexps nội suy chúng. – hhaamu