我想用类似 C:\foo
的路径替换某些内容,所以我:
s/hello/c:\foo
但是这是无效的。 我需要转义一些字符吗?
我想用类似 C:\foo
的路径替换某些内容,所以我:
s/hello/c:\foo
但是这是无效的。 我需要转义一些字符吗?
s/hello/c:\foo # fatal syntax error: "Substitution replacement not terminated"
s/hello/c:\foo/ # syntactically okay
s!hello!c:\foo! # also okay, and more readable with backslashes (IMHO)
您提出的第二个问题是关于\f
的问题,它被视为一个换页转义序列(ASCII 0x0C),就像在双引号中一样,但这不是您想要的。
您可以转义反斜杠,或让变量插值“隐藏”问题:
s!hello!c:\\foo! # This will do what you want. Note double backslash.
my $replacement = 'c:\foo' # N.B.: Using single quotes here, not double quotes
s!hello!$replacement!; # This also works
请查看perlop
中关于引用和类似引用操作符的处理方式,以获取更多信息。
$path = "hello/there";
$path =~ s/hello/c:\\foo/;
print "$path\n";
\f
是“换页符”的转义序列。\f
是一个有效的转义序列,用于换页符。 - daxims/hello/c:\\foo/;
这会解决你的问题。 \
是一个特殊字符,所以你需要转义它。 {}[]()^$.|*+?\
是元字符(特殊字符),你需要转义它们。