Java 如何在前面没有反斜杠的情况下替换所有双引号

Java 如何在前面没有反斜杠的情况下替换所有双引号,java,regex,double-quotes,Java,Regex,Double Quotes,假设我有一个如下所示的字符串: String param = "[\"\\n\",\"\\t\",\"'\",\"\\\"\",\"\\\\\"]" \n,\t,',\",\\ System.out.println的输出为: "\n","\t","'","\"","\\" 我想替换前面没有反斜杠的双引号,或者,换言之,我希望System.out.println输出如下: String param = "[\"\\n\",\"\\t\",\"'\",\"\\\"\",\"\\\\\"]"

假设我有一个如下所示的字符串:

String param = "[\"\\n\",\"\\t\",\"'\",\"\\\"\",\"\\\\\"]"
\n,\t,',\",\\
System.out.println的输出为:

"\n","\t","'","\"","\\"
我想替换前面没有反斜杠的双引号,或者,换言之,我希望System.out.println输出如下:

String param = "[\"\\n\",\"\\t\",\"'\",\"\\\"\",\"\\\\\"]"
\n,\t,',\",\\
所以我用了这个模式:

System.out.println(param.replaceAll("\\\\{0}\"", ""));
但我明白了:

\n,\t,',\,\\
如您所见,前面带有反斜杠的双引号也被替换。 如何防止它被替换


编辑:很抱歉方括号的问题。您可能会忽略它们,因为它们与此问题无关

您需要将反斜杠与负回溯相匹配

负回溯如下所示:

(?<!X)Y
Java代码:

System.out.println(param.replaceAll("(?<![^\\\\]\\\\)\"", ""));
System.out.println(param.replaceAll((?使用此正则表达式:

"([^,]+)"

请尝试以下代码():


仅将其用于代码:

System.out.println(param.replaceAll("\"(.)\"", "$1").replaceAll("\\[\"(.*)\"\\]", "$1"));
您的字符串:

String param = "[\"\\n\",\"\\t\",\"'\",\"\\\"\",\"\\\\\"]";
所有项目都位于双引号之间。因此,第一个replaceAll将替换引号:

System.out.println(param.replaceAll("\"(.)\"", "$1"));
输出:

["\n,\t,',\",\\"]
要清除字符串的开头和结尾,请执行以下操作:

System.out.println(param.replaceAll("\"(.)\"", "$1").replaceAll("\\[\"(.*)\"\\]", "$1"));

您可以使用以下正则表达式来匹配和删除作为字符串文字限定符的

(?s)(?<!\\)((?:\\{2})*)"([^"\\]*(?:\\.[^"\\]*)*)"

“<代码>”\“代码”的预期结果是什么?我发布了一个答案,它应该支持带有转义序列的任何双引号字符串。很高兴它对您有用。如果我的答案对您有帮助的话,请考虑一下投票(参见)。@WiktorStribiżew是的,我意识到了。编辑过。你不能用这种方法匹配字符串文本。@WiktorStribiżew你所说的
字符串文本是什么意思?
?你能举个例子吗?看看它是如何处理
“\\\”
字符串文本的(定义
\\\”
文本字符串)@WiktorStribiżew我明白了。谢谢你指出这一点。我将保留我的答案,以供将来的读者使用。你是对的Wiktor。我只记住了给定的输入字符串。让我看看是否可以对其进行任何改进。:)@WiktorStribiżew我认为可以很好地工作。我怀疑它是否可以推广。它可能适用于当前字符串,但不适用于当前字符串。请参见下面我的答案。
String param = "[\"\\n\",\"\\t\",\"'\",\"\\\"\",\"\\\\\",\"\\\\\\\"\"]";
System.out.println(param);
// => ["\n","\t","'","\"","\\","\\\""]
String regex = "(?s)(?<!\\\\)((?:\\\\{2})*)\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"";
param = param.replaceAll(regex, "$1$2");
System.out.println(param);
// => [\n,\t,',\",\\,\\\"]