首页 > 解决方案 > Java - 仅在尚未转义时转义双引号

问题描述

给定一个字符串作为输入,我想转义所有应该转义但没有转义的双引号。例如,"<?xmlversion=\"1.0"encoding="UTF-8\"?>"作为输入,输出应该是"<?xmlversion=\"1.0\"encoding=\"UTF-8\"?>". 我正在考虑使用正则表达式,但不完全确定如何使用。如果有人可以提供帮助,我将不胜感激。

标签: javaregexstring

解决方案


您可以在这里使用正则表达式替换:

String xml = "<?xmlversion=\\\"1.0\"encoding=\"UTF-8\\\"?>";
System.out.println(xml);
xml = xml.replaceAll("(?<!\\\\)\"", "\\\\\"");
System.out.println(xml);

这打印:

<?xmlversion=\"1.0"encoding="UTF-8\"?>
<?xmlversion=\"1.0\"encoding=\"UTF-8\"?>

这里使用的正则表达式模式是:

(?<!\\)"

这将针对所有前面没有反斜杠的双引号,并将它们替换为\". 请注意,我们必须在 Java 的正则表达式语言中对反斜杠进行双重转义。文字双引号也出现\"在 Java 字符串中。


推荐阅读