gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:09 32 4
gpt4 key购买 nike

假设我有如下字符串:

String param = "[\"\\n\",\"\\t\",\"'\",\"\\\"\",\"\\\\\"]"

System.out.println 的输出是:

"\n","\t","'","\"","\\"

我想替换前面没有反斜杠的双引号,或者换句话说,我希望 System.out.println 输出如下所示:

\n,\t,',\",\\

所以我使用了这个模式:

System.out.println(param.replaceAll("\\\\{0}\"", ""));

但是我得到了这个:

\n,\t,',\,\\

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

编辑:对方括号感到抱歉。你可以忽略它们,因为它们与这个问题无关

最佳答案

您可以使用以下正则表达式来匹配和删除"是字符串文字限定符:

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

参见 regex demo .

详情

  • (?s) - DOTALL 修饰符(以防万一字符串文字可以跨行)
  • (?<!\\) - 没有\紧靠当前位置的左侧
  • ((?:\\{2})*) - 第 1 组:任何 0+ 个连续出现的 2 个反斜杠
  • " - 双引号(字符串文字开始)
  • ([^"\\]*(?:\\.[^"\\]*)*) - 第 2 组:
    • [^"\\]* - 除 \ 以外的任何 0+ 个字符和 "
    • (?:\\.[^"\\]*)* - 0+序列
      • \\. - 一个 \后跟任何字符
      • [^"\\]* - 除 \ 以外的任何 0+ 个字符和 "
  • " - 结束字符串文字双引号

参见 Java demo :

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,',\",\\,\\\"]

关于java - 如何在前面没有反斜杠的情况下替换所有双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46742494/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com