java - 在双引号内转义双引号

标签 java regex json

我有一个字符串 [{"Id":"1","msg":""Lorem Ipsum""}] ,我需要像这样在引号内转义引号[{"Id":"1","msg":"\"Lorem Ipsum\""}]。我无权访问要修改的生成器代码,因此我正在寻找正则表达式解决方案或高效的 Java 解决方案。

我尝试使用 \"[^\"]*?(\"*)[^\"]*?\" 选择匹配项,但没有用。非常感谢任何帮助。提前致谢。

请注意,不能保证模式总是两个双引号在一起,它也可以是这样的 "Lorem "Ipsum"test",它应该变成 "Lorem\"Ipsum\"测试"

PS:我已经看过了Regular expression to escape double quotes within double quotes

最佳答案

问题

有限自动机 - 理论上等同于正则表达式 - 无法解析递归结构。由于您可以使用内引号和可能的内引号,因此无法使用正则表达式解决您的问题。

虽然现代正则表达式引擎可以通过几个扩展来解决这个问题,但不要浪费时间寻找引号中的引号。您很快就会发现您实际上正在构建一个完整的 JSON 解析器。

作为@johnchen902 stated ,即使是图灵机驱动的解析器也无法处理歧义 - 所以你最好不要尝试对损坏的 JSON 提出修复建议。

解决方案

使用专用工具创建 JSON

给定的字符串is not a valid JSON .它可能是使用字符串连接创建的,这通常是个坏主意,因为它无法正确转义。您应该使用可以从 Java 数据结构构建 JSON 的 JSON 库,例如 gson .创建对象列表,向其添加对象到对象字典,然后让库进行转义和转换。

要求创建者使用 validator

如果您从外部来源收到了字符串,那么请求您可以使用的有效 json 是完全合法的。我猜想是创作者把String拼接在一起了,这种构建结构化语言的方式是错误的。要求原始创建者使用标准库来创建 JSON,或者至少使用 validator 。所有现代编程语言都提供这些机制。

enter image description here

关于java - 在双引号内转义双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17213468/

相关文章:

至少 x 个数字字符的 javascript 正则表达式

Java正则表达式匹配 "string"

jquery - 如何通过从多选下拉列表中删除更改时的现有选项来附加新选项?

java - 如果第一个字母是辅音,则返回 boolean 值

java - tools.jar问题无法执行目标org.apache.maven.plugins :maven-compiler-plugin

java - 从字符串的开头/结尾删除特定字符

json - 使用 list.files 在 R 中读取带重音的文件名

python - json.dumps() : escaping forward slashes

Java fileWriter 没有将我的所有输出写入文件

java - 使用 StringTokenizer 统计单词数和单词中的字符数