2009-06-10 321 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并未受到任何影响 - 可能会或可能不适合。

相关问题