java - Java - 仅在尚未转义时转义双引号
问题描述
给定一个字符串作为输入,我想转义所有应该转义但没有转义的双引号。例如,"<?xmlversion=\"1.0"encoding="UTF-8\"?>"
作为输入,输出应该是"<?xmlversion=\"1.0\"encoding=\"UTF-8\"?>"
. 我正在考虑使用正则表达式,但不完全确定如何使用。如果有人可以提供帮助,我将不胜感激。
解决方案
您可以在这里使用正则表达式替换:
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 字符串中。
推荐阅读
- android - iOS 和 Android 之间的 React Native 不同渲染
- reactjs - react componentDidMount中未定义递归异步函数
- html - 在 Heroku 上部署时图像未加载
- laravel-nova - 如何在帖子的创建页面中使用用户的属性作为默认值?
- javascript - 访问 ejs 文件中脚本标签中传递的元素
- php - youtube 嵌入视频节目“视频不可用”
- python - 如何在 python 中转换字符串以获取 ASCII 数字?
- symfony - @Route - 如何确保学说也检查父实体
- postgresql - Spring Batch Processing - Postgresql 共享内存不足
- c# - Android(Xamarin)如何通过蓝牙从手环获取数据(脉冲)