尝试如下操作:
模式:
(?<!\\)([$]+)([^$]*?)\\([^$]*?)(?<!\\)\1
替代:
\1\2\\\\\\\\\3\1
使用您提供的测试的示例:
https://regex101.com/r/X9lGCF/2
图案粗浅说明:
(?<!\\)([$]+)
-匹配并捕获至少一个未捕获的
$
;
(?<!\\)
是一个负面的回顾,以确保
$
的前面没有反斜杠
([^$]*?)\\([^$]*?)
-捕获第一个匹配项之间的文本
$
序列和相同的初始匹配
$
序列在
\\
(?<!\\)\1
-重新使用最初匹配的
$
我们的模式中的顺序(这加强了周围环境
$
序列长度相同;例如不匹配
$\\$$
)确保最后一个序列也未被捕获。
替换将用周围捕获的文本替换反斜杠(它们已被转义,因此我们使用其中8个来获取4个反斜杠),并且
$
序列。