Regex: ersetzt backslash mit einem doppelten umgekehrten Schrägstrich, aber nicht Doppel-backslash mit vierfach-backslash
Habe ich folgenden regex:
s/\\/\\\\/g
Dies ist eine schöne Aufgabe ersetzen alle " \
" - Zeichen durch "\\
". Allerdings möchte ich zum Schutz gegen matching-backslashes, die neben anderen backslashes. Wenn ich dies tun:
s/[^\\]\\[^\\]/\\\\/g
es nur Fänge nicht aufeinander folgende umgekehrte Schrägstriche. Aber jetzt gibt es das offensichtliche problem, dass die Spiele gehören die beiden benachbarten Zeichen, das sollte nicht ersetzt werden. Wie kann ich das umgehen?
- Sie müssen tun, irgendeine Art von, es sei denn, in der Regel mit einer lookahead-Funktion
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie wäre es mit einem negativen lookahead angeben "ersetzen Sie diese slash, es sei denn, es ist gefolgt von einem Schrägstrich"?
Mit negativen lookahead und negative lookbehind, das scheint zu funktionieren:
In der PowerShell ist dies das Ergebnis:
Es ergibt sich auch in
foo\\\bar
nicht betroffen sind -, die möglicherweise oder möglicherweise nicht geeignet.Wenn Sie wissen, was escaped die Zeichen, die Sie wollen, zu entsprechen, können Sie immer fügen Sie einfach alle diese Fälle (\n,\r,\t,\"....)
s/([^\\])\\([^\\])/$1\\\\$2/g