我有一个字符串 [{"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 。所有现代编程语言都提供这些机制。
关于java - 在双引号内转义双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17213468/