我如何在Perl中解除一些反斜杠但不是全部?

时间:2010-10-12 11:03:36

标签: regex perl

我正在使用tinyperl和以下脚本:

@lines=<STDIN>;
foreach (@lines) {
    s/\\(.)/($1 eq '"' or $1 eq '\\') ? $1 : '\\' . $1/eg;
    print;
}

我希望每个反斜杠只能用以下字符来考虑,并且只有当下面的字符是双引号或另一个反斜杠时才删除反斜杠。 (我知道这个目的可能对你不利,但没关系)。

例如,我想将abc\ndef\\ghi\"\\\n翻译为abc\ndef\ghi"\\n。但是这个脚本似乎将其翻译为abcndef\ghi"\n

你可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

尝试

s/\\([\\"])/$1/g;

[]给出了一个匹配反斜杠或双引号的字符类,所以我们要说的是替换反斜杠后跟另一个反斜杠或双引号与匹配的字符类中的任何一个字符。

答案 1 :(得分:0)

看起来你想要一个预见断言(see the section in perlre on Extended Patterns)。

s/\\(?=[\\"])//g;