首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转义双引号中的双引号

转义双引号中的双引号
EN

Stack Overflow用户
提问于 2013-06-20 20:18:01
回答 2查看 2K关注 0票数 3

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

我试着用\"[^\"]*?(\"*)[^\"]*?\"选择匹配,但没有用。任何帮助都是非常感谢的。提前谢谢。

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

附言:我已经看过Regular expression to escape double quotes within double quotes

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-20 20:29:08

问题所在

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

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

作为@johnchen902 stated,即使是图灵机驱动的解析器也不能处理多义性-所以您最好不要尝试修复损坏的JSON。

解决方案

使用专用实用程序创建JSON

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

要求创建者使用验证器

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

票数 3
EN

Stack Overflow用户

发布于 2013-06-20 20:36:58

代码语言:javascript
复制
String escaped = str.replaceAll(":\"\"(.+?)\"\"([,}])", ":\"\\\\\"$1\\\\\"\"$2");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17213468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档