2010-10-12 108 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

相關問題