PHP正则表达式带enters的负前瞻
我试图刮取一个.JSON文件,但是返回的文件在1.JSON文件中返回多个JSON对象,导致JSON文件无效。我试图通过在JSON文件之前添加一个[a],在JSON文件之后添加一个]来解决这个问题。然后使用正则表达式在正确的位置添加逗号 这是正则表达式之前的文件PHP正则表达式带enters的负前瞻,php,regex,json,Php,Regex,Json,我试图刮取一个.JSON文件,但是返回的文件在1.JSON文件中返回多个JSON对象,导致JSON文件无效。我试图通过在JSON文件之前添加一个[a],在JSON文件之后添加一个]来解决这个问题。然后使用正则表达式在正确的位置添加逗号 这是正则表达式之前的文件 [{"status":"success"} {"values":{"cpu":26.5152886753948387,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":
[{"status":"success"}
{"values":{"cpu":26.5152886753948387,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"}
{"values":{"cpu":25.5839236550189568,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"}
]
我创建了以下正则表达式:}(?!\s,|\s])
。
我遇到的问题是,它仍然在最后一个}之后添加a,尽管后面跟着a]
我得到的是:
[{"status":"success"},
{"values":{"cpu":26.5152886753948387,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"},
{"values":{"cpu":25.5839236550189568,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"},
]
预期结果:
[{"status":"success"},
{"values":{"cpu":26.5152886753948387,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"},
{"values":{"cpu":25.5839236550189568,"ram":0.8452846061135513},"origin":"core","type":-1,"uuid":"0000-e8-de-27-176d10"}
]
将正则表达式中的
\s
替换为\s*
,因为\s
将匹配单个空格字符,而\s*
将匹配零个或多个空格字符
}(?!\s*[,\]])
谢谢,那正是我要找的地方!
$re = "/}(?!\\s*[,\\]])/m";
$str = "[{\"status\":\"success\"}\n\n{\"values\":{\"cpu\":26.5152886753948387,\"ram\":0.8452846061135513},\"origin\":\"core\",\"type\":-1,\"uuid\":\"0000-e8-de-27-176d10\"}\n\n{\"values\":{\"cpu\":25.5839236550189568,\"ram\":0.8452846061135513},\"origin\":\"core\",\"type\":-1,\"uuid\":\"0000-e8-de-27-176d10\"}\n\n]";
$subst = "},";
$result = preg_replace($re, $subst, $str);