Regex: заменить обратную косую черту двойной обратной косой чертой, но не двойную обратную косую черту двойной четвертой. - PullRequest
1 голос
/ 10 июня 2009

У меня есть следующее регулярное выражение:

s/\\/\\\\/g

Это хорошая работа по замене всех символов "\" на "\\". Тем не менее, я хочу защититься от совпадающих обратных слешей, которые соседствуют с другими обратными слешами. Если я сделаю это:

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

это ловит только несмежные обратные слеши. Но теперь существует очевидная проблема, заключающаяся в том, что совпадения включают две соседние буквы, которые не должны заменяться. Как я могу преодолеть это?

Ответы [ 4 ]

4 голосов
/ 10 июня 2009

Как насчет негативного взгляда на указание "заменить этот слеш, если за ним не следует другой слэш"?

1 голос
/ 09 декабря 2014

С отрицательным взглядом вперед и отрицательным взглядом сзади, это похоже на работу:

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

В PowerShell это результат:

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

Это также приводит к тому, что foo\\\bar не изменяется - это может или не может быть уместным.

0 голосов
/ 10 июня 2009

з / ([^ \\]) \\ ([^ \\]) / $ 1 \\\\ $ 2 / г

0 голосов
/ 10 июня 2009

Если вы знаете, какие экранированные символы вы хотите сопоставить, вы всегда можете просто включить все эти случаи (\ n, \ r, \ t, \ "....)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...