使用正则表达式替换反斜杠和两个反斜杠

时间:2014-04-18 09:54:36

标签: regex perl

如何用双反斜杠替换字符串中的单个反斜杠?

我尝试过诸如

之类的事情
s/\\(?!\\)/\\\\/g
s/\\/\\\\/g
s/[^//]/\\\\/g

但他们都会互相产生多个反斜杠。

所以我想:

\test

替换为

\\test

编辑:对不起我还应该提到正则表达式是一个循环所以我需要一个只有匹配字符串的正则表达式,如果只有一个反斜杠。一旦有多个反斜杠,那么正则表达式应该拒绝该字符串。道歉

2 个答案:

答案 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