2010-10-12 114 views
2

我使用tinyperl与下面的脚本:如何在Perl中忽略一些反斜杠但不是全部?

@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

你能帮忙吗?

回答

4

尝试

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

[]给出匹配任何一个反斜杠或双引号,所以我们说更换一个反斜杠后接一个反斜杠或双引号用哪个字的字符类匹配的字符类。

+0

不会这也删除我的''backslash'or“'用反斜杠一起?还有,将perl的每一次他都会遇到一个反斜杠吃两个字符?(PS。降价是有时有点马车) – Benoit 2010-10-12 11:08:59

+0

@Benoit您可能已经看到我的答案的第一个版本,在我编辑它之前已短暂发布,以便第二个匹配的字符不会被删除。请尝试修改后的解决方案,并为此感到抱歉! – mikej 2010-10-12 11:13:01

+0

谢谢。相当好! – Benoit 2010-10-12 11:44:46

相关问题