关于一个java正则表达式替换的问题

一个很简单的json串:String json = "{\"name1\":\"value1\",\"na\"me2\":\"va\"lue2\"}";

问题是:现在key和value的值中都有可能出现双引号,需要将key或value中值的双引号(不管中间有多少个双引号都替换,边界的不能替换)替换味单引号;现在
json= json.replaceAll("\"(\w*)\"(\s*:\s*)", "'$1'$2");
json= json.replaceAll("(\s*:\s*)\"(\w*)\"", "$1'$2'");

都达不到要求....

替换成功打印到控制台后希望是:{"name1":"value1","na'me2":"va'lue2"}

[code="java"]json = json.replaceAll("\"", "'").replaceAll("([\{\:\,])\'", "$1\"").replaceAll("\'([\}\:\,])", "\"$1");[/code]

不一定要用正则表达式嘛,反正我写不出来,我倒是有个思路可以解决!

1.替换字符中的所有空格字符串为非空格
解决"name":"value1","na"me2":"value2","name3" : " value3 "
解决空格问题;

2.用正则表达式将字符分组String reg="(":"\b|","\b)";
String[] arr=s.split(reg);

3.循环查找替换arr[i]中"字符不在开头或者结尾的字符!

如果每个key或者value中只有连续出现的 " 一次或多次,就更简单
[code="java"]json = json.replaceAll("(\w+)\"+(\w+)", "$1\'$2");[/code]

[color=red]写了半天,老报错,负向断言的时候里面不能用.*?贪婪匹配 (希望有人能告诉我为什么) [/color]
用的.(1,Integer.MAX_VALUE-1)?进行贪婪匹配
[code="java"]
Pattern p = Pattern.compile("(?<=(\{|,|:)\"(.{1,"+(Integer.MAX_VALUE-1)+"}?))\"(?=.+?\"(:|,|\}))");
[/code]

一个效率不太高的方法:

String json = "{\"name1\":\"value1\",\"na\"me2\":\"va\"lue2\"}";
Pattern p = Pattern.compile("\w+(\")\w+");
Matcher m = p.matcher(json); // 获得匹配器对象
while (m.find()) {
json=json.replace(m.group(),m.group().replaceAll("\"",""));
}
System.out.println(json);

上面写错了点
[code="java"]
json = json.replaceAll("(?<=(\{|,|:)\"\w{1,100})\"(?=\w+\"(:|,|\}))","'");
[/code]

上面还是写错了!好像忘记匹配多个“了
这个就对了
[code="java"]
public static void main(String[] args) {
String json = "{\"name1\":\"value1\",\"na\"me2\":\"va\"l\"u\"e2\"}";
System.out.println(json);
Pattern p = Pattern.compile("(?<=(\{|,|:)\").*?(?=\"(:|,|\}))");
Matcher m = p.matcher(json);
while(m.find()){
String tmp = m.group();
json = json.replaceAll(tmp, tmp.replaceAll("\"","'"));
}
System.out.println(json);
}
[/code]