Java替换所有正则表达式

时间:2014-08-08 20:41:31

标签: java regex regex-lookarounds

我试图在java中编写一个replaceAll,可以将json替换为数组而不是对象,这就是我的意思的一个例子:

test:[{\"asdf\":\"asasdd\"}]

我的目标是将测试对象中的所有}替换为数组但不影响任何其他}

(我正在使用的json是有效的(与下面的json不同)但是我一直在用下面的字符串进行测试,因为我希望它会有相同的结果并且它会短得多)

String test = "[asdfasdf}test:{\"asdf\":\"asasdd\"}.sdfasdfsadfsdf, test:{\"asdf\":\"asasdd\"}sdfsdf } ";

//期望的结果

String test = "[asdfasdf}test:[{\"asdf\":\"asasdd\"}].sdfasdfsadfsdf, test:[{\"asdf\":\"asasdd\"}]sdfsdf } ";


System.out.println(test.replaceAll("(?<=[test:{])}", "}]")); // 

所以作为旁注,我想指出为什么我发现这个问题很重要,因为一个糟糕的供应商将json作为一个对象,而不是一个数组,如果它没有超过一个结果。因此,它打破了我的json类解析器

1 个答案:

答案 0 :(得分:1)

这应该有效:

(?<=\btest:){[^}]*}

这是DEMO

示例代码:

String input  = "[asdfasdf}test:{\"asdf\":\"asasdd\"}.sdfasdfsadfsdf, test:{\"asdf\":\"asasdd\"}sdfsdf } ";
System.out.println(input.replaceAll("(?<=\\btest:)\\{[^}]*\\}","[$0]"));

模式说明:

  (?<=                     look behind to see if there is:
    \b                       the word boundary
    test:                    'test:'
  )                        end of look-behind
  {                        '{'
  [^}]*                    any character except: '}' (0 or more times)
  }                        '}'