Php 简单正则表达式不在多维JSON字符串上

Php 简单正则表达式不在多维JSON字符串上,php,regex,Php,Regex,因此,我将提供一个简单的json字符串示例,涵盖我的大多数实际字符串情况: "time":1430702635,\"id\":\"45.33\",\"state\":2,"stamp":14.30702635, 我试图对字符串中的数字进行preg替换,将它们括在引号中,除了索引已经被量化的数字,比如我的字符串-“\state\”:2 到目前为止,我的正则表达式是 preg_replace('/(?!(\\\"))(\:)([0-9\.]+)(\,)/', '$2"$3"$4',$string

因此,我将提供一个简单的json字符串示例,涵盖我的大多数实际字符串情况:

"time":1430702635,\"id\":\"45.33\",\"state\":2,"stamp":14.30702635,
我试图对字符串中的数字进行preg替换,将它们括在引号中,除了索引已经被量化的数字,比如我的字符串-“\state\”:2 到目前为止,我的正则表达式是

 preg_replace('/(?!(\\\"))(\:)([0-9\.]+)(\,)/', '$2"$3"$4',$string);
在本例中,我要获取的重新命名字符串是未加引号的“\state\”值,由正则表达式跳过,因为它包含前面的\“of:digit

"time":"1430702635",\"id\":\"45.33\",\"state\":2,"stamp":"14.30702635",
为什么还要替换“\state\”号

也试过了

新编辑:

所以从我的努力来看

  (?!\\")
这不管用

如果我被允许的话,我将不回答这个问题,以防其他人知道原因

我的解决方案是使用这个正则表达式,而不是不使用,我选择了yes

$string2 = preg_replace('/(\w":)([0-9\.]+)(,)/', '$1"$2"$3',$string);
谢谢。

(?!\\”
是一种消极的前瞻,通常在正则表达式的一开始就没有用处。在特定的正则表达式中,它根本没有任何效果:表达式
(?!(\\\”)(\:)
的意思是“空字符串后面没有斜杠引号,然后是冒号”,这相当于只尝试自己匹配冒号


我认为您试图实现的是一种消极的向后看,它在PCRE中的语法略有不同:
(?。进行此更改似乎符合您的要求:

您是否可以先对其进行解码,然后将所有元素转换为字符串,然后重新编码,因为我会丢失大整数这里有一个适合您当前情况的解决方案,但我认为这可以做得更好…
preg_replace(“((“时间”)([0-9.]+),|(“戳记”)([0-9.]+,)~,“$2$4”$3$5),$string);
@chris85我的字符串只是一个例子,我的实际字符串长约100kb,不能用文字来覆盖所有内容。我想我应该重新表述我的问题。所有应该有引号的数字是否一致?大于5位小数位,以143开头,等等。?