这个问题在这里已有答案:
我正在使用正则表达式从String值中删除引号 . 这些String值可以包含转义引号,但也包含转义的反斜杠字符 .
我不想删除转义引号,只删除非转义引号 . 但是,转义后的反斜杠字符位于非转义引号之前的情况会造成困难 .
我想要如下结果:
"value" -> value
'value' -> value
"\"value\"" -> \"value\" <-- contains escaped quotes
"value\" -> value\"
"value\\" -> value\\ <-- contains escaped backslash before non-escaped quote
"""val"ue\\\""" -> value\\\"
以下正则表达式几乎适用于我,除了它在报价之前有一个偶数个时它也会剥去反斜杠,当我只想逃避双引号和单引号字符时 .
(?<!\\\\)(?:\\\\{2})*[\"']
1 回答
出现此问题的原因是您匹配这些反斜杠并将其删除 . 要保留它们,请捕获这些反斜杠,并替换为
$1
占位符:见regex demo .
((?<!\\\\)(?:\\\\{2})*)
现在包含在(...)
中,您可以通过在替换模式中使用$1
来引用此组中捕获的值 .