2009-06-10 13 views
1

で二重のバックスラッシュダブルバックスラッシュとバックスラッシュを置き換えではなく、私は、次の正規表現を持っている:正規表現:四重バックスラッシュ

s/\\/\\\\/g 

これは「\\」とすべての「\」の文字を置き換えるの素晴らしい仕事をしていません。しかし、私は他のバックスラッシュに隣接しているバックスラッシュをマッチさせないようにしたい。私がこれをすると、隣接していないバックスラッシュのみがキャッチされます:

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

しかし、今や、マッチには置き換えてはならない2つの隣接キャラクタが含まれているという明らかな問題があります。どうすればこれを克服できますか?

+0

あなたは通常、先読みでない限り何かをする必要があります – DevelopingChris

答えて

4

は否定先読みについて指定するためにどのようにこれらすべてのケースを含めることができます一致させたいです負で

+0

ありがとう、正規表現の初心者として私はちょうど "先読み"という言葉を聞く必要がありました。私は今必要なものを持っています。 – Odrade

+0

先読みで+1 – DevelopingChris

+2

この質問に対する回答は何ですか? – tofutim

0

あなたはどのようなエスケープ文字を知っていればあなたはいつもちょうど(\ nは、\ R、\トン、\」....)

0

S /([^ \\])\\([^ \\])/ $ 1 \\\\ $ 2/gで

+0

あなたは$ 1と$ 2を残そうとしています... – tanascius

+0

これは行のバックスラッシュの先頭が欠けていますか?行末(おそらくそれが懸念事項ではない)? –

+0

はい。また、1つの文字で区切られたバックスラッシュも見逃しています。しかし、それは質問に一致します:) – agsamek

1

? "それは別のスラッシュが続いている限り、このスラッシュを置き換えます"先読みと否定的なlookbehind、これは動作するようだ:

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

- または適切であってもなくてもよいまた、foo\\\bar影響されないことになる

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

:PowerShellでは、これは結果です。