regex - 如何使用 perl regex 在字符串中转义美元符号 ($)

标签 regex perl special-characters dollar-sign

我正在尝试使用 perl regex 转义给定字符串中的几个特殊字符。它适用于除美元符号外的所有字符。我尝试了以下方法:

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

在正则表达式的第一部分,“$”需要转义,因为它是一个特殊的正则表达式字符,表示字符串的结尾。

正则表达式的第二部分被视为“普通”字符串,其中“$”没有特殊含义。因此反斜杠是一个真正的反斜杠,而在第一部分中它用于转义美元符号。

此外,在变量定义中,您需要对反斜杠和美元符号进行转义,因为它们在双引号字符串中都有特殊含义。

关于regex - 如何使用 perl regex 在字符串中转义美元符号 ($),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9716443/

相关文章:

java - 删除数字但不是单词的一部分

c# - 使用正则表达式从字符串中提取数据

regex - 为什么字符类比交替更快?

javascript - 如何在 Perl 分页期间保留从每个页面中的组合框选择的值?

symfony - 如何使用内部带有 @ 符号的 twig 对象变量

c++ - 在控制台或窗口上显示 Unicode/ASCII 字符

regex - 使用 SED 删除不匹配的行

php - 在 php 中使用正则表达式验证十六进制和 rgba 颜色

perl - Perl 中的多语言文本排序,在 Windows 上,使用区域设置

java - java中如何显示特殊字符?