Java-如何忽略引号内的引号

时间:2017-06-05 06:19:45

标签: java json regex

我的json文件的值部分有一些未转义的引号,

"key":"value"

就像

"text":"a personal persona as a street-smart "tough girl", which when 
combined with raw talent","birthday":"19871108"

我想知道如何使用正则表达式来逃避我的价值部分内的报价? 使它看起来像

"text":"a personal persona as a street-smart \"tough girl\", which when 
combined with raw talent","birthday":"19871108"

1 个答案:

答案 0 :(得分:0)

棘手的部分不是使用正则表达式查找引号,而是使用正则表达式查找未转义引号。

未转义的引号的定义是前面有偶数个反斜杠的定义(零反斜杠是最常见的情况)。

这个表达式就是这个丑陋的东西:

(?<!(?:[^\\]|$)(?:\\{2})?\\)"

如果您认为不好,请查看Java中的转义版本:

(?<!(?:[^\\\\]|$)(?:\\\\{2})?\\\\)\"

这基本上做的是找到尚未被转义的所有报价。我使用的测试字符串是:Testing "unescaped". \"escaped\". \\"unescaped again\\"正则表达式只匹配第一组和第三组引号,而不是转义的第二组。

应该用\"或java,\\\"替换。

试一试,让我知道!