2

我想替换字符串中第二次出现的反斜杠,这可能很容易。

细绳

$ra = '\\Test\C$\temp';

输出应该是这样的

"\\Test/C$/temp"

搜索和替换更改字符串中的所有内容

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

任何见解都受到高度赞赏

4

3 回答 3

3

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

$ra =~ s!^(.*?\\)(.*)!my ($e,$f)=($2,$1);$e=~s/\\/\//g;$f.$e!e;

或使用拆分:

my @v = split /\\+/, $ra;
$ra = (shift @v) . '\\' . join("/", @v);
于 2013-06-07T02:58:12.183 回答
2

“我想替换......字符串中的反斜杠[带斜杠]”

s,\\,/,g;

“前两次出现的反斜杠仍然存在”

s,(?<!^)(?<!^\\)\\,/,g;

需要两个零宽度负后向断言,因为后向不能具有可变宽度。如果反斜杠之前没有行首或行首然后是反斜杠,则它们成功。

于 2013-06-07T02:59:25.757 回答
1

字符串字面量

 '\\Test\C$\temp';

创建字符串

 \Test\C$\temp

所以首先,你需要使用

 $ra = '\\\\Test\\C$\\temp';

或者如果你想偷工减料,

 $ra = '\\\Test\C$\temp';

然后你可以简单地做

 $ra =~ s{(?<!^)(?<!^\\)\\}{/}g;

请注意,Windows 认为

 //Test/C$/temp

完全等价于

 \\Test\C$\temp

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

于 2013-06-07T04:18:11.940 回答