所以我将提供一个简单的JSON字符串示例,涵盖了我实际遇到的大多数字符串情况:
"time":1430702635,\"id\":\"45.33\",\"state\":2,"stamp":14.30702635,
我正在尝试通过 preg_replace 将字符串中的数字用引号括起来,除了已经被引号括起来的数字,就像在我的字符串中 - '\state\':2 到目前为止,我的正则表达式是
preg_replace('/(?!(\\\"))(\:)([0-9\.]+)(\,)/', '$2"$3"$4',$string);
在这种情况下,我希望获得的结果字符串是未引用的"\state\"值,被正则表达式跳过,因为它包含了:digit之前的\"。
"time":"1430702635",\"id\":\"45.33\",\"state\":2,"stamp":"14.30702635",
为什么 '\state\' 数字也被替换了?
也尝试在 https://regex101.com/r/xI1zI4/1 上进行了测试。
新的编辑:
所以根据我的尝试,
(?!\\")
不能工作!!
如果允许我的话,我会不回答,以防有人知道原因。
我的解决方案是使用这个正则表达式,而不是 NOT,我选择了 yes..
$string2 = preg_replace('/(\w":)([0-9\.]+)(,)/', '$1"$2"$3',$string);
谢谢。
preg_replace('~(("time":)([0-9.]+),|("stamp":)([0-9.]+),)~', '$2$4"$3$5",',$string);
- chris85