这个字符串是输入的,还是嵌入到你的程序中的。您可以这样做以摆脱反斜杠字符:
my $path = "S:/2014 March/Test Scenarios/load/2014 March";
顺便说一句,文件名和路径名中最好不要有空格。在某些情况下,它们可能会有点问题。如果你不能消除它们,那是可以理解的。
你应该看两件事:
- 使用quotemeta 可以帮助引用字符串中的特殊字符,并允许您在替换中使用它们。即使您的字符串中有反斜杠,
quotemeta 也会处理它们。
- 您不必在匹配和替换中使用
/ 作为分隔符。相反,您可以替换各种其他字符。
这些都是一样的:
$string =~ s/$regex/$replace/;
$string =~ s#$regex#$replace#;
$string =~ s|$regex|$replace|;
您还可以使用圆括号、方括号或花括号:
$string =~ s($regex)($replace);
$string =~ s[$regex][$replace]; # Not really recommended because `[...]` is a common regex
$string =~ s{$regex}{$replace};
这些作为正则表达式类引号字符的优点是它们必须是平衡的,所以如果我有这个:
my $string = "I have (parentheses) in my string";
my $regex = "(parentheses}";
my $replace = "{curly braces}";
$string = s($regex)($replace);
print "$string\n"; # Still works. This will be "I have {curly braces} in my string"
即使我的字符串包含这些类型的字符,只要它们是平衡的,一切仍然有效。
给你的:
my $Path = 'S:\2014 March\Test Scenarios\load\2014 March';
$nExit = quotemeta $string; #Quotes all meta characters...
$nExit =~ s($sMatchPattern)($sFullReplacementString);
这应该适合你。