如何用双反斜杠替换字符串中的单个反斜杠?
我尝试过诸如
之类的事情s/\\(?!\\)/\\\\/g
s/\\/\\\\/g
s/[^//]/\\\\/g
但他们都会互相产生多个反斜杠。
所以我想:
\test
替换为
\\test
编辑:对不起我还应该提到正则表达式是一个循环所以我需要一个只有匹配字符串的正则表达式,如果只有一个反斜杠。一旦有多个反斜杠,那么正则表达式应该拒绝该字符串。道歉
答案 0 :(得分:3)
最值得注意的是为正则表达式使用不同的分隔符,所以所有的斜塔都不会混淆:
my $str = '\test';
$str =~ s{\\}{\\\\}g;
print $str;
输出:
\\test
<强>更新强>
根据您修改后的规范,如果您只想逃避单个反斜杠,而忽略所有其他反斜杠,那么只需使用负向前瞻和后观断言:
my $str = <<'END_STR';
\one \\two \\\three
END_STR
print $str;
$str =~ s{(?<!\\)\\(?!\\)}{\\\\}g;
print $str;
输出:
\one \\two \\\three
\\one \\two \\\three
答案 1 :(得分:1)
echo '\replace' | perl -pe 's/\\/\\\\/g'
\\replace
或者与sed
# echo '\replace' | sed 's/\\/\\\\/g'
\\replace