Perl替换字符串中的\

Perl替换字符串中的\,perl,Perl,我想替换字符串中第二次出现的反斜杠,这可能非常简单 串 $ra = '\\Test\C$\temp'; 输出应该是这样的 "\\Test/C$/temp" 搜索和替换更改字符串中的所有内容 $ra =~ s/\\/\//g; makes output to "/Test/C$/temp" \Test\C$\temp 任何高度赞赏的见解这可能不是最好的方法,但您可以使用e选项: $ra =~ s!^(.*?\\)(.*)!my ($e,$f)=($2,$1);$e=~s/\\/\//g;

我想替换字符串中第二次出现的反斜杠,这可能非常简单

$ra = '\\Test\C$\temp';
输出应该是这样的

"\\Test/C$/temp"
搜索和替换更改字符串中的所有内容

$ra =~ s/\\/\//g; makes output to "/Test/C$/temp"
 \Test\C$\temp

任何高度赞赏的见解

这可能不是最好的方法,但您可以使用e选项:

$ra =~ s!^(.*?\\)(.*)!my ($e,$f)=($2,$1);$e=~s/\\/\//g;$f.$e!e;
或使用拆分:

my @v = split /\\+/, $ra;
$ra = (shift @v) . '\\' . join("/", @v);
“我想替换字符串中的…反斜杠[用斜杠]”

“前两次出现的反斜杠保留”

s,(?
由于lookbehind不能具有可变宽度,因此需要两个零宽度负lookbehind断言。如果齿隙前面没有行的开头,或者没有行的开头,然后是反斜杠,则它们会成功。

字符串文字

 '\\Test\C$\temp';
创建字符串

$ra =~ s/\\/\//g; makes output to "/Test/C$/temp"
 \Test\C$\temp
所以首先,你需要使用

 $ra = '\\\\Test\\C$\\temp';
或者如果你想抄近路

 $ra = '\\\Test\C$\temp';
然后你可以简单地做

 $ra =~ s{(?<!^)(?<!^\\)\\}{/}g;
完全等同于

 \\Test\C$\temp

所以我不知道你为什么要完成你说的你想完成的事情。

第一个反斜杠前面总是会有反斜杠吗?你说的“第二次出现”是指“第一次以外的出现”?如果字符串的第一个字符不是反斜杠,该怎么办?请为一些混淆道歉。我想要的最终输出是“\\Test/C$/temp”前两次出现的反斜杠仍然存在,其余的还有待修改。我总是得到与此类似的输入,尽管字符串长度可能不同,但格式是相同的。您真的想要
$ra='\\\\Test\C$\temp'
,对吗?第一个反斜杠将转义为当前输入中的单个反斜杠。谢谢您的回复。B但是我没有得到预期的结果
 \\Test\C$\temp