2009-06-10 187 views
1

我有以下的正則表達式:正則表達式:用雙反斜線替換反斜槓,但與四反斜槓不是雙反斜線

s/\\/\\\\/g 

這確實替換所有「\」的人物了很好的工作與「\\」 。但是,我想防止匹配與其他反斜槓相鄰的反斜槓。如果我這樣做:

s/[^\\]\\[^\\]/\\\\/g 

它只捕獲不相鄰的反斜槓。但現在有一個明顯的問題,比賽包括兩個不應該被替換的相鄰字符。我該如何克服這一點?

+0

你需要做某種事情,除非通常採用前瞻 – DevelopingChris 2009-06-10 13:59:43

回答

4

如何負先行指定「除非它後面跟着另一個斜線替換此斜槓」?

+0

謝謝,作爲一個正則表達式初學者,我只需要聽到「lookahead」這個詞。我現在有我需要的東西。 – Odrade 2009-06-10 14:00:12

+0

+1望遠鏡 – DevelopingChris 2009-06-10 14:00:24

0

如果你知道什麼轉義字符要匹配你永遠可以包括所有這些情況下(\ n,\ r,\ t,\」 ....)

0

S /([^ \\])\\([^ \\])/ $ 1 \\\\ $ 2 /克

1

隨着負前瞻性和負面看起來,這似乎工作:

"(?<!\\)\\(?!\\)" 

在PowerShell中,這是結果:

"foo\\Bar foo\bar" -replace "(?<!\\)\\(?!\\)","\\" 
foo\\Bar foo\\bar 

這也導致foo\\\bar並未受到任何影響 - 可能會或可能不適合。